2014-02-27 4 views
-1

У меня есть приложение, которое использует ° (символ степени, ANSI # 176) в разных местах, и я не могу понять разные способы его отображения - некоторые из них правильные, но другие выглядят так, как если бы была конверсия в UTF-8, а затем обратно в ANSI. Как правило, он отображается ОК в TLabels, но не TEdits, а иногда нормально в TRichEdit. Перекомпиляция в XE5 не делает заметной разницы. Поэтому мой вопрос: как я получу # 176, чтобы последовательно появляться на западных и восточных ОС.Что такое D2007 с символами степени на японском/корейском/китайском языке?

+3

'# 176' - это только символ степени на некоторых кодовых страницах. Это не может работать на системах, использующих другую кодовую страницу. Вы говорите, что это все еще не работает в XE5. Должно. D2009 и выше, включая XE5, используют строки Unicode, которые ведут себя одинаково во всех версиях Windows. Можете ли вы опубликовать простой пример, который показывает проблему на XE5? – hvd

+0

Но он должен работать на системах, на которых # 176 является символом степени на текущей кодовой странице, и, насколько я могу судить, (не владея ничем иным, кроме английского), что это имеет место на всех дальневосточных OS я пробовал. Charmap.exe показывает 0xB0 как «символ степени» для всех перечисленных наборов символов. – user3359525

+0

В Charmap нажмите «Расширенный вид», и вы увидите, что набор символов - Unicode. Чтобы увидеть некоторые символы кодовых страниц, выберите другой набор символов в этом выпадающем списке. – hvd

ответ

2

Весь ваш подход является ошибочным. Символ, на который вы ссылаетесь, № 176 - это символ степени на некоторых кодовых страницах ANSI, но не все. И в дальневосточных локациях, где используются двухбайтовые символьные наборы, № 176 бессмысленна сама по себе. Потому что это часть двухбайтового символа. Если вы хотите, чтобы ваше приложение хорошо работало во всех локалях, вам нужно будет его кодировать с использованием текста Юникода.

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

+0

Не смертельно ошибочно. Надеюсь, и поскольку моя главная цель - заставить эту работу работать в D2007, я хотел бы разобраться в ее поведении. Любопытно, что код, такой как Label1.Caption: = '° F ºF' + # 176 + 'F' + # 186 + 'F', выдает мусор (даже не китайские иероглифы по словам моего коллеги), но StringGrid1.Cells [1 , 1]: = Char (176); работает, как ожидалось. Это в D2007 BTW. – user3359525

+0

@ user3359525 Да, полностью испорчен. Он никогда не будет работать в D2007 с использованием ANSI. Вы должны помнить, что страницы кода, о которых вы говорите, являются страницами с двойным байтом. Вам нужно использовать Unicode. –

+0

@ user3359525 Я очень удивлен, что вы говорите, что он работает, как ожидалось, с сеткой строк в D2007. Является ли ваша строковая сетка стандартным Delphi TStringGrid, или вы используете какую-то обычную стороннюю сетку? – hvd

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