2009-04-23 7 views
2

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

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

FFFE D802 DC00

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

˘Ü

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

Спасибо!

hrniels

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

 Я также пробовал его с Комодо Править с тем же результатом. 

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

ответ

1

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

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

0xF0 0x90 0xA0 0x80 

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

+1

0xFFFE - это знак байтового порядка, который указывает на использование UTF-16 (малое значение). Блокнот должен уметь это обнаружить. –

+0

Мне это хорошо известно. Но он не говорит, использует ли он Блокнот или нет. Существует много текстовых редакторов, которые не обрабатывают UTF-16. – Skurmedel

+0

Кроме того, все редакторы не могут обрабатывать спецификации. – Skurmedel

1

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

FEFF D802 DC00

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

+0

+1. Похоже на решение. – Skurmedel

+0

А, может быть, ты прав. Я попробую это завтра и сообщите здесь :) – hrniels

+0

К сожалению, это не сработает. Если я изменю блокнот спецификации (и все остальные редакторы, которые я пробовал тоже), отображает два квадрата. Интересно, что если я копирую два квадрата здесь (с firefox), я вижу нужного персонажа:


                            
    hrniels
                                
                            
                        
                    

1

Возможно, вы забыли прочитать документацию _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++ и забудьте о Блокноте.

 Смежные вопросы

  • Нет связанных вопросов^_^