Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

UTF-8 -> ANSI [D7, XP]


Нагуглить_не_смог ©   (2009-12-13 17:46:00) 

Как в строке заменить все UTF-8 символы на их ansi эквиваленты? Есть массив с utf кодами и массив с соответствующими ansi.
['U+4D9', 'U+4A3', 'U+493', 'U+4AF', 'U+4B1', 'U+49B', 'U+4E9', 'U+4BB', 'U+4D8', 'U+4A2', 'U+492', 'U+4AE', 'U+4B0', 'U+49A', 'U+4E8', 'U+4BA']
['є', 'њ', 'ѓ', '‰', '±', 'ќ', 'µ', 'Ћ', 'Є', 'Њ', 'Ѓ', '‡', '¦', 'Ќ', '¤', 'Ћ']


Омлет   (2009-12-16 18:39:00) [1]

> Переход на Delphi 2009 действительно помог

Богатый.


Нагуглить_не_смог   (2009-12-16 16:53:00) [2]

Всем большое спасибо! Очень выручили. Переход на Delphi 2009 действительно помог. :)))


Anatoly Podgoretsky   (2009-12-14 11:28:00) [3]

> sniknik  (14.12.2009 10:23:17)  [17]

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


sniknik   (2009-12-14 10:23:00) [4]

> Переход на TNT также требует смеы версии Дельфи
ну, я когда пробовал не переходил, но я конечно в ide редакторе ничего и не писал кроме как по русски/английски (т.е. том что поддерживается)... вполне устраивало то, что в рантайм/компонентах юникод был (устраивало в том смысле, что сделал вывод - "если вдруг понадобится то можно использовать").


Anatoly Podgoretsky   (2009-12-14 10:14:00) [5]

> sniknik  (14.12.2009 09:36:14)  [14]

Переход на TNT также требует смеы версии Дельфи, на версию не нже D2006 - из-за редактора и запис в файл, в формате UTF8


sniknik   (2009-12-14 09:40:00) [6]

> кстати редактор в IDE дельфи
D7 имеется ввиду.

и еще кстати, вот с этого ([11]) надо начинать, т.е. с того что делаешь, а не с каких то самопридуманных замен неизвестно чего и неизвестно для чего...


sniknik   (2009-12-14 09:36:00) [7]

кстати редактор в IDE дельфи тоже не понимает юникода, т.что ни моя проверка ни Ord(WideChar('ұ')) не пойдет...
но можно из файла например читать.

> Для тебя рабочим решением будет переход на D2010
или установка TNT контролов (или как они там сейчас называются в платной ипостаси).


sniknik   (2009-12-14 09:25:00) [8]

> s:= Edit1.Text;
а какого типа Edit1.Text как думаешь? говорили же, конвертация делается простым присвоением, и во все стороны а не только в желаемую.
убери "слабое звено" и проверь еще раз, так
s:= "Қазақстан. астам ұлт өкілдері тұрады";
...


Anatoly Podgoretsky   (2009-12-14 09:12:00) [9]

А чего ты хочешь для ANSI - s:= Edit1.Text;
A Ord(WideChar('ұ')) = ?

Для тебя рабочим решением будет переход на D2010


Нагуглить_не_смог   (2009-12-14 09:07:00) [10]

Вот строка на входе: "Қазақстан. астам ұлт өкілдері тұрады"
s:widestring;
begin
s:= Edit1.Text;
Edit2.Clear;
//Edit2.Text := StringToWideString(Edit1.Text, 1251);
for I := 0 to Length(s) do Edit2.Text :=Edit2.Text+ IntToStr(Ord(s[i])) +';';

Не работает, хоть убейте. :( Ord возвращает 63. :(
A Ord(WideChar(1178)) == 1178


sniknik   (2009-12-13 22:17:00) [11]

> Чтот с WideString не вышло. :(
+
>> что значит это не utf-8.
- значит не юникод.

> А можно как-то по символу его код получить? Как Ord для ANSI?
вы будете смеяться но можно... функция Ord (неожиданно правда?)

> Омлет ©
будь проще, конвертирование в дельфи давно уже делается так
string:= widestring;  и наоборот widestring:= string;

(к примеру в ADO строка конекта типа вайдестринг, а в дельфи (D7 например) компоненты/строки в ansi и это кто нибудь замечает? просто присваивают. и обратно, значения из базы в юникоде разве требуют каких то заморочек? нет, опять таки простым присвоением обходятся...)


Anatoly Podgoretsky   (2009-12-13 22:11:00) [12]

> Нагуглить_не_смог  (13.12.2009 21:42:07)  [7]

Можно в справке прочитать, что такое ORD
И как работать с WideString


Омлет   (2009-12-13 21:58:00) [13]

http://delphiworld.narod.ru/base/widestr_to_str.html


Нагуглить_не_смог   (2009-12-13 21:42:00) [14]

Чтот с WideString не вышло. :( А можно как-то по символу его код получить? Как Ord для ANSI?


sniknik   (2009-12-13 19:46:00) [15]

if s[1] = #1240 then
s - вайдестринг


Нагуглить_не_смог   (2009-12-13 19:32:00) [16]

Ставлю вопрос по другому.
На входе строка String s := 'Әтра-та-та';
if (magicFunction(s[1]) == 1240) { System.out.println("We did it!"); }
Нужна эта магическая функция... На Delphi.


Нагуглить_не_смог   (2009-12-13 19:09:00) [17]

Вообщем вот:
Символ   Шестнадцатеричный код   Десятичный код
Ә  04D8  1240
ә  04D9  1241
Ғ  0492  1170
ғ  0493  1171
Қ  049A  1178
қ  049B  1179
Ң  04A2  1186
ң  04A3  1187
Ө  04E8  1256
ө  04E9  1257
Ұ  04B0  1200
ұ  04B1  1201
Ү  04AE  1198

Нужно заменить. А как это сделать?
ү  04AF  1199
Һ  04BA  1210
һ  04BB  1211
I  0049 (есть в ANSI)  0073 (есть в ANSI)
i  0069 (есть в ANSI)  0105 (есть в ANSI)


Нагуглить_не_смог   (2009-12-13 18:25:00) [18]

Возможно, UTF-16. Но как заменить?


sniknik   (2009-12-13 18:04:00) [19]

> Он заменяет символы из набора на символ "?".
что значит это не utf-8.


Нагуглить_не_смог   (2009-12-13 17:54:00) [20]

Utf8ToAnsi - не помог. Он заменяет символы из набора на символ "?".


Наверх

Титульная страница Поиск, карта сайта Написать письмо