Почему мое приложение не отображает Unicode? - PullRequest
1 голос
/ 21 декабря 2009

Я с самого начала создал приложение MFC, стараясь с самого начала использовать структуры, поддерживающие Юникод, такие как CStringW, LPCWSTR и т. Д., Для хранения и обработки данных. Юникод также определен в проекте.

Поскольку я говорю только на одном языке, я попробовал следующий тест, чтобы убедиться, что строка в Юникоде была правильно обработана и сохранена приложением.

В одном из полей редактирования я ввел ALT + 2061 и ALT + 2066 для отображения символов, недоступных на моей клавиатуре текст ссылки Единственное, что отображается в окне редактирования, - это квадрат. Попробовал тоже самое подумать в блокноте и символы были правильно отображены. Это просто проблема со шрифтом? Если да, то какой шрифт я должен использовать?

UPDATE:

Я скопировал несколько символов из unibook и вставил их в поля редактирования. Помимо небольшого количества символов они были обработаны и сохранены правильно, поэтому я доволен этим.

Счастливого Рождества.

Ответы [ 6 ]

2 голосов
/ 21 декабря 2009

Это напрямую не проблема шрифта, это проблема с вашим методом ALT + number.

Используя клавишу alt и цифровую клавиатуру, можно ввести любой код ASCII, даже те, которые не имеют клавиши на клавиатуре. не можно вводить символы Юникода таким способом - каждый раз, когда вы вводите 4-значный код, он просто переносится на 8-битный ASCII-код:

2061 -> 100000001101 -> 00001101 -> ASCII символ 13, музыкальная нота

Причина, по которой он отображается в виде квадрата, заключается в том, что символ 13 является управляющим, поэтому большинство современных шрифтов не имеют визуального представления.

Если вы хотите вводить символы Юникода с помощью цифровой клавиатуры, вам нужно будет использовать расширенный режим, добавленный Microsoft - нажмите и удерживайте alt, затем нажмите и удерживайте плюс (+) на цифровой клавиатуре , Теперь введите номер нужного вам символа Юникода, а затем отпустите клавиши alt и +.

2 голосов
/ 21 декабря 2009

Убедитесь, что метод ввода Alt-key, который вы описываете, работает в других программах. Кажется, он не работает в моей системе WinXP.

Возможно, вы просто захотите скачать Unibook с unicode.org и скопировать символы из этого, просто чтобы быть уверенным.

1 голос
/ 21 декабря 2009

U + 2061 - это «ФУНКЦИОНАЛЬНОЕ ПРИЛОЖЕНИЕ», которое является специальным непечатаемым символом «оператор», U + 2066 еще не определено (в Unicode 5.2). Таким образом, то, что вы видите в своем заявлении, является правильным; возможно вы ввели разные коды в Блокнот?

0 голосов
/ 22 декабря 2009

Я предлагаю вам запустить функцию IsWindowUnicode () где-нибудь в вашем приложении в элементе управления редактирования. Если он возвращает TRUE, тогда вы точно знаете, что ваше приложение и ваши элементы управления поддерживают Unicode (и тогда это, скорее всего, проблема со шрифтом). Однако, если он возвращает false, вы должны заглянуть в свой код и настройки проекта, чтобы выяснить, почему ваше приложение / окно не поддерживает Unicode.

0 голосов
/ 21 декабря 2009

Зайдите в Spy ++ и посмотрите на класс окна. Это Edit или какой-то вариант RICHEDIT? В окне RichEdit необходимо указать шрифт, который вы можете сделать с помощью CRichEditCtrl :: SetDefaultCharFormat .

0 голосов
/ 21 декабря 2009

Да. Это проблема со шрифтом.

Я бы не беспокоился об этом, потому что шрифты, установленные на компьютере вашего клиента, будут отличаться от ваших. Если ему понадобится кандзи, он его получит. Вы можете, однако, форсировать определенный шрифт. Тогда вы увидите это правильно на вашем Windows.

Я также рекомендую вам не использовать Unicode с W (widechar). Смотри https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful

...