Отображение символов Unicode выше U+FFFF в Windows

приложение, которое я разрабатываю с помощью EVC++ 4, работает в Windows CE 5 и должно поддерживать юникод (насколько мне известно, wchar_t использует UTF-16 в Windows, поэтому я использую его), поэтому я хочу иметь возможность протестировать его с «более экзотическим» символы. Особенно с символами, которые используют 4 байта в UTF-16, а не только 2. Поэтому я пытаюсь отображать такие символы в текстовом редакторе (атм на моем настольном ПК с Windows XP, а не на встроенном устройстве).

Но мне это пока не удалось. В качестве примера я выбрал этот символ. Как упоминалось здесь, "MPH 2B Damase" должен поддерживать этот символ. . Поэтому я скачал шрифт и поместил его в Windows\Fonts. Я создал текстовый файл с помощью шестнадцатеричного редактора (на всякий случай) со следующим содержимым:

FFFE D802 DC00

Когда я открываю его с помощью блокнота (который должен поддерживать юникод, верно?) и использую загруженный шрифт, он отображает не 1 символ, как предполагалось, а 2:

˘Ü

Что я делаю неправильно? :)

Спасибо!

Хрнильс

Edit: Flipping the BOM, as suggested, doesn't work. Notepad (and all other editors I tried, too) displays two squares in this case. Interesting is that if I copy the two squares here (with firefox) I see the right character:


I've also tried it with Komodo Edit with the same result.

Использование UTF-8 также не помогает блокноту.


person hrniels    schedule 23.04.2009    source источник


Ответы (3)


Вашему текстовому редактору может не понравиться UTF-16. Вероятно, предполагается ANSI или UTF-8.

Вместо этого попробуйте ввести эквивалент UTF-8:

0xF0 0x90 0xA0 0x80

Это не поможет вашему тестированию, но позволит убедиться, что ваш шрифт не виноват. Текстовый редактор, поддерживающий UTF-16, называется Komodo Edit.

person Skurmedel    schedule 23.04.2009
comment
0xFFFE — это метка порядка байтов, указывающая на использование UTF-16 (с прямым порядком байтов). Блокнот должен уметь это определять. - person Cory Walker; 23.04.2009
comment
Я хорошо знаю об этом. Но он не говорит, использует ли он Блокнот или нет. Есть много текстовых редакторов, которые не поддерживают UTF-16. - person Skurmedel; 23.04.2009
comment
Я использовал блокнот для теста. Но завтра тоже попробую. - person hrniels; 23.04.2009
comment
Я пробовал это с Komodo Edit, но безуспешно. Komodo отображает то же самое, что и блокнот :/ - person hrniels; 24.04.2009

Что произойдет, если вы поставите метку порядка байтов наоборот?

FEFF D802 DC00

(На данный момент последовательность байтов интерпретируется как два символа U+02D8 U+00DC, поэтому мы надеемся, что переворачивание спецификации приведет к тому, что байты будут считаны в предполагаемом порядке)

person Community    schedule 23.04.2009
comment
Ах, может быть, ты прав. Завтра попробую и отпишусь здесь :) - person hrniels; 23.04.2009
comment
К сожалению, это не работает. Если я изменю блокнот BOM (и все другие редакторы, которые я пробовал), отображаются два квадрата. Интересно, что если я скопирую сюда два квадрата (с помощью firefox), я увижу правильный символ: ‹pre›‹/pre› - person hrniels; 24.04.2009
comment
Если бы это был один квадрат, я бы предположил, что Блокнот не имеет доступа к шрифту, но тот факт, что он отображает два квадрата, — плохой знак. Интересно, что символы сохраняются через вырезание/вставку. - person ; 24.04.2009

Вероятно, вы забыли прочитать документацию _wfopen(). Там они указывают параметр кодировки. Кстати, я предположил, что вы уже используете Unicode (wchars).

Я бы рекомендовал вам использовать UTF-8 в файлах со спецификацией или без нее, но заставляя ваш fopen использовать флаг UTF-8. Похоже, _wfopen("newfile.txt", "r, ccs=UTF-8"); будет работать с UTF-8 со спецификацией или без нее, а также с UTF-16. Не делайте ошибку, используя ccs=Unicode, это обычное дело иметь файлы UTF-8 без BOM.

Вы действительно должны немного прочитать о Unicode, прежде чем пытаться работать. Это об этом как очень хорошее вложение - это сэкономит вам время, если вы поймете, как работает Unicode.

Вот начало http://blog.i18n.ro/newbie-guide-to-unicode/ и не забудьте прочитать ссылки в конце статьи.

Если вам действительно нужен простой текстовый редактор, позволяющий работать с кодировками Unicode, используйте Notepad++ и забудьте про Блокнот.

person sorin    schedule 12.08.2010