![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 - не помог. Он заменяет символы из набора на символ "?".