Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.02.14;
Скачать: CL | DM;

Вниз

UTF-8 -> ANSI   Найти похожие ветки 

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

Как в строке заменить все 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-13 17:54) [1]

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


 
sniknik ©   (2009-12-13 18:04) [2]

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


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

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


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

Вообщем вот:
Символ   Шестнадцатеричный код   Десятичный код
Ә  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 19:32) [5]

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


 
sniknik ©   (2009-12-13 19:46) [6]

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


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

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


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

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


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

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

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


 
sniknik ©   (2009-12-13 22:17) [10]

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

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

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

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


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

Вот строка на входе: "Қазақстан. астам ұлт өкілдері тұрады"
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


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

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

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


 
sniknik ©   (2009-12-14 09:25) [13]

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


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

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

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


 
sniknik ©   (2009-12-14 09:40) [15]

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

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


 
Anatoly Podgoretsky ©   (2009-12-14 10:14) [16]

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

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


 
sniknik ©   (2009-12-14 10:23) [17]

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


 
Anatoly Podgoretsky ©   (2009-12-14 11:28) [18]

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

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


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

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


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

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

Богатый.



Страницы: 1 вся ветка

Текущий архив: 2010.02.14;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.011 c
15-1260134838
Германн
2009-12-07 00:27
2010.02.14
Что в Си означает cout<<" n"?


4-1228900202
Хмм
2008-12-10 12:10
2010.02.14
Кликер


15-1260264866
Гипербореец
2009-12-08 12:34
2010.02.14
Аналог Application.ProcessMessages для С#


2-1261040863
Шурка
2009-12-17 12:07
2010.02.14
ImageList


2-1260808991
alexan
2009-12-14 19:43
2010.02.14
Вопрос по Delphi