powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Кодировка символов
19 сообщений из 19, страница 1 из 1
Кодировка символов
    #33299978
Лёлик2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как в C++ Builder 6.0 выставить кодировку Юникод(Шестн.) вместо ASCII(дес.) чтобы можно было использовать всякие там альфа, бета и другие закорлючки, как в Word'e(Вставка->Символ), нажимая Alt+ код буквы с дополнительной клавиатуры (который буду смотреть во всё том же Word'e)?
...
Рейтинг: 0 / 0
Кодировка символов
    #33304973
Лёлик2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я почему-то думал предложений будет больше.
...
Рейтинг: 0 / 0
Кодировка символов
    #33304974
Лёлик2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я почему-то думал предложений будет больше.
...
Рейтинг: 0 / 0
Кодировка символов
    #33305151
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лёлик2Как в C++ Builder 6.0 выставить кодировку Юникод(Шестн.)

что значит выставить ? надо уникод пользуйся им.

wchar_t *str = L"это юникодная строка";
...
Рейтинг: 0 / 0
Кодировка символов
    #33310190
Лёлик2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно ввести символ которого нет на клавиатуре(альфа, бета и т.д.).
В Word'e для этого есть Вставка->Символ, но в Билдере 6.0 такого то нет!
Но всё в том же вордовском окне вставки символа указывается код символа и кодировка, т.е. можно нажать Alt и набрать этот код и должен появится этот символ. В разных кодировках одному и тому же коду соответствуют разные символы. Например, в кодировке Юникод(шестн.) у символа бета код 03В2 я в билдере нажимаю Alt ввожу это, а вместо беты появляется большая буква "О"!
Пробовал в Ворде написать что мне надо и через буфер обмена вставить, вставляется вместо беты знак вопроса. Я решил что это проблемы с кодировкой. Может я ошибаюсь? Если да, тогда как мне выйти из этой ситуации?
...
Рейтинг: 0 / 0
Кодировка символов
    #33310388
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лёлик2, дорогой мой... КУДА ты вставляешь? В текст программы? В поле ввода? В базу? В объект какой-нибудь самодельный? КУДА?
...
Рейтинг: 0 / 0
Кодировка символов
    #33310428
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лёлик2у символа бета код 03В2 я в билдере нажимаю Alt ввожу это, а вместо беты появляется большая буква "О"!



так и пиши :
Код: plaintext
1.
  wchar_t str[] = {0x03B2, 0x00, 0x00};
  wprintf( L"TComponent : [%s]", str  );
...
Рейтинг: 0 / 0
Кодировка символов
    #33310629
Лёлик2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlЛёлик2, дорогой мой... КУДА ты вставляешь? В текст программы? В поле ввода? В базу? В объект какой-нибудь самодельный? КУДА?
Да и в текст программы и в поле Caption какого нибудь компонента вставлять хочю.
...
Рейтинг: 0 / 0
Кодировка символов
    #33310644
Лёлик2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А по поводу этого:
так и пиши :
wchar_t str[] = {0x03B2, 0x00, 0x00};
wprintf( L"TComponent : [%s]", str );

ничего не понял, только что 03В2 - это код моего символа, а всё остальное:
где это писать и что это за другие непонятные мне слова?
...
Рейтинг: 0 / 0
Кодировка символов
    #33310652
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лёлик2ничего не понялникогда не нажимай F1
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Кодировка символов
    #33312479
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уикодная строка должна завершаться двумя нулями.

в str лежит строка с твоим символом

Лёлик2А по поводу этого:
так и пиши :
wchar_t str[] = {0x03B2, 0x00, 0x00};
wprintf( L"TComponent : [%s]", str );

ничего не понял, только что 03В2 - это код моего символа, а всё остальное:
где это писать и что это за другие непонятные мне слова?
...
Рейтинг: 0 / 0
Кодировка символов
    #33312781
Лёлик2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
никогда не нажимай F1
И не нажму всё равно бессмысленно. Мне такая копия билдера в руки попала, в которой требовалось во избежание ошибок при установке отменить установку файла справки, Visi Broker и ещё парочку каких то штучек. Так что при вызове справки появляется сообщение мол файл Bc6.hlp не найден, с предложением найти его вручную или произвести его установку с диска(на котором его нет). Вот так.
...
Рейтинг: 0 / 0
Кодировка символов
    #33312791
Лёлик2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lepsik'у:
wchar_t str[] = {0x03B2, 0x00, 0x00};
wprintf( L"TComponent : [%s]", str );
Я так понял wchar_t это такой тип данных.
str - это массив, в котором через запятую к моей бете в двойных кавычках можно и обычный текст(буквы с клавиатуры) дописать. Главно чтобы двумя нолями заканчивалось всё это.
Но что это: wprintf
и это: ( L"TComponent : [%s]",
и что мне потом полю Caption какого то компонента присваивать значение str?
...
Рейтинг: 0 / 0
Кодировка символов
    #33312805
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лёлик2wprintf

это печать уинкодный строк.

Есил хочешь использовать уникод с AnsiString борланда, то должен преобразовать в мултибайт сначала.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/unicode_2bj9.asp

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
AnsiString utf_to_ansi( const wchar_t *wstr, const size_t wstr_len, bool* error, const size_t CodePage )
{
	AnsiString  result;
  if( wstr == NULL || wstr_len==  0  || CodePage ==  0  )
  {
	  return result;
  }
    int alen = ::WideCharToMultiByte(CodePage, 0 ,wstr,wstr_len,NULL, 0 ,NULL,NULL);
	assert(alen>= 0 );
	if(alen== 0  || (alen== 1  && wstr_len==- 1 ))//error или wstr==L""
	{
		if( error )
		{
			*error = GetLastError() ? true : false;
		}
		return result;
	}
	if( wstr_len!=- 1  )
	{
		alen+= 1 ;//учитываем завершающий символ
	}
    char buffer = new char[alen];
	memset(buffer,  0 , alen);
    //если str_len==-1, то нулевой символ перезапишется
    ::WideCharToMultiByte(CodePage, 0 ,wstr,wstr_len, buffer,alen,NULL,NULL);
    result = buffer;
	delete [] result;
     return result; 
}

а потом

Код: plaintext
1.
2.
3.
TEdit *edit = new  TEdit(NULL);
wchar_t wstr[] = {0x03B2, 0x00, 0x00};
bool error = false;
edit->Caption = utf_to_ansi( wstr, wcslen(wstr),  &error,  1251 /*russian, 1252 - english*/ );


не тестировал, но примерно так должно работать, а хелп лучше поставить
...
Рейтинг: 0 / 0
Кодировка символов
    #33313066
KPIIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у меня вопрос тоже про кодировку - может кто поможет (использую std С++):
имею файл в ANSI кодировке
надо перекодировать в OEM
оба формата для хранения одного символа используют 1 байт - то есть char подходит
что делаю:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
static char ansi[] = 
"БВГДЕЖЗИЙКЛМНОПРСУФХЦЧШЩУбвгдежзийклмнопрсуфхцчшщт";

static char oem[] = 
"ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—‘˜™љ›њќћџ ЎўЈ¤Ґ¦§Ё©«¬­®ЇаЄ";

for(i =  0 ;i< 96 ;i++){
		for(k= 0 ;k< 50 ;k++){
			if(buffer[i]==gr_ansi[k]){
                             // чего то делаю
                 }
	}

ну так вот "чего то делаю" никогда не бывает?
к слову пробовал тоже самео сделать с помощью Qstring (Qt) с их "модными" streamencoder'amи - ничего не получалось - наверное руки кривые
может кто знает, как и где еще копать?
...
Рейтинг: 0 / 0
Кодировка символов
    #33313092
KPIIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соврал - файл в ASCII кодировке
...
Рейтинг: 0 / 0
Кодировка символов
    #33313199
Лёлик2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конечно большое спасибо Lepsik'у, но чесно говоря это пока не мой уровень, может когдато и разберусь.
А пока поделюсь своим опытом решения этой проблемы может комуто и пригодится. В ворде редактором формул пишу всё что мне надо, выхожу из редактора формул в ворд, копирую в буфер обмена, открываю Paint вставляю из буфера и сохраняю в bmp-файл. Потом в Билдере вставляю всё это как Image.
Примитивно, но зато понятно.
...
Рейтинг: 0 / 0
Кодировка символов
    #33313651
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsikуикодная строка должна завершаться двумя нулями.

Двумя нулями, если бы это был массив char, а так Вы использовали wchar_t, поэтому одного нуля "за глаза и за уши":

Код: plaintext
wchar_t str[] = {0x03B2, 0x0000};
...
Рейтинг: 0 / 0
Кодировка символов
    #33318346
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KPIIS
надо перекодировать в OEM


из примера не видно что идет перекодирование, из примерно не видно что лежит в буффер и что в gr_ansi

надо так видимо :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
for( int i =  0 ; i < size_buffer; i++)
{
  for(j =  0 ; j < sizeof(ansi); j++)
  {
       if( buffer[i]==ansi[j] )
            buffer[i] = oem[j];
  }
}
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Кодировка символов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]