Вот вопрос новичка на Unicode. Я использую Embarcadero C++ Builder 2009, где они якобы изменили строки по умолчанию, чтобы использовать Unicode.Вопросы преобразования Юникода
- Я печатаю различные символы в своем исходном редакторе, которые не являются частью стандартного «7-битного ASCII».
- Моя программа использует строковый тип C++ Builder для ввода пользовательского ввода.
- Я также добавляю ввод вручную, установив значение в wchar_t.
Казалось бы, существуют конфликты в интерпретации символов. Иногда я получаю символ, например, код 0x00C7 ('Ç'), но иногда тот же символ кодируется как 0xFFC7, например, в редакторе исходного кода. Насколько я понимаю, первый - это правильный Юникод, последний - «что-то еще». Может кто-то подтвердить это?
Интересно, откуда такое кодирование «что-то еще» и как избавиться от него?
EDIT: Дальнейшие исследования: кажется, что одно место, где ** появляется 0xFF кодирование, когда я делаю что-то вроде этого:
string str = ...;
wchar_t wch = (wchar_t)str[i];
тот же результат независимо от того, если это станд :: строка или VCL Строка , Есть wchar_t
не то же самое, что и Unicode?
Если utf-8 используется для кодирования, то каждый символ юникода может занимать 1, 2 или 4 байта или более. Насколько я понимаю, wchar_t всегда имеет размер 2 байта для каждого символа, что может быть проблемой. – greatwolf
@ VictorT. Тогда какой тип характера я должен использовать? Я думаю, что простой ** char ** - 8 бит. – Lundin
Вы должны использовать 'wstring' не' string' для строк с широкими символами (Unicode.) Новый тип 'String' использует широкие символы, хранящиеся как UTF-16 (не беспокойтесь о других кодировках, таких как UTF8 на данный момент.) Ваш код 'string str = ...;' потеряет данные как есть. Тогда вам не понадобится бросок во второй строке. –