Отображение символов Юникода выше U + FFFF в Windows - PullRequest
2 голосов
/ 23 апреля 2009

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

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

FFFE D802 DC00

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

˘Ü

Что я делаю не так? :)

Спасибо!

hrniels

Edit: Перелистывание спецификации, как предлагается, не работает. Блокнот (и все остальные редакторы, которые я тоже пробовал) отображает два квадрата в этом случае. Интересно, что если я скопирую два квадрата здесь (с помощью Firefox), я увижу правильный символ:


Я также попробовал это с Komodo Edit с тем же результатом. 

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

Ответы [ 3 ]

1 голос
/ 23 апреля 2009

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

FEFF D802 DC00

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

1 голос
/ 12 августа 2010

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

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

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

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

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

1 голос
/ 23 апреля 2009

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

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

0xF0 0x90 0xA0 0x80

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

...