![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что не так с utf8?
пикассо © (2009-03-16 17:50:00)Всем привет!
Нужно проверить, является ли строка строкой unicode и, если да, то перекодировать в ansi:
if IsTextUnicode(PChar(Text), Length(Text), nil) then
Text := Utf8ToAnsi(Text);
но проверка не работает. Что я не так делаю?
PS. Я не так спросил или что-то не то?
Vetal (2009-03-16 22:54:00) [1]
> Palladin © (16.03.09 21:11) [17]
> #FF#FE у юникодов, у утф8 нет ничего... приемщик должен
> быть уведомлен передатчиком, что прийдет утф8...
Но это не мешает проверить утф8 текст или нет.
http://ru.wikipedia.org/wiki/UTF8
sniknik (2009-03-16 21:41:00) [2]прога не понадобилась, и так нашел.
http://www.unicode.org/faq/utf_bom.html#BOM
правда не вижу тут, что оно не всегда используется, но этому думаю ты поверишь, т.к. судя по всему только такие файлы и видел.
sniknik (2009-03-16 21:32:00) [3]> у утф8 нет ничего...
есть! но не всегда. я делал обмен по utf8 и мне давали спецификацию. могу в проге посмотреть что за цифры там идут для него.
Anatoly Podgoretsky (2009-03-16 21:22:00) [4]> sniknik (16.03.2009 20:42:15) [15]
Byte Order Marker
Palladin (2009-03-16 21:11:00) [5]
> BOM (както это расшифровывается, не помню)
ВсеОбъемныйМаркер :)
#FF#FE у юникодов, у утф8 нет ничего... приемщик должен быть уведомлен передатчиком, что прийдет утф8...
sniknik (2009-03-16 20:53:00) [6]> не уверен что тогда NotePad его правильно поймет.
хм. понимает... тогда да действительно, он точно контекст смотрит.
sniknik (2009-03-16 20:42:00) [7]> Больше-то смотреть не на что.
у файлов есть префикс - BOM (както это расшифровывается, не помню), хотя его может и не быть... см. [4], не уверен что тогда NotePad его правильно поймет.
Anatoly Podgoretsky (2009-03-16 20:40:00) [8]Не надо он шутит.
пикассо (2009-03-16 20:01:00) [9]
> Palladin © (16.03.09 19:26) [12]
спасибо, попрробую
Palladin (2009-03-16 19:26:00) [10]
> пикассо (16.03.09 19:08) [10]
нотепады тоже предполагают
хотя если речь идет о читаемом тексте, то
Function MaybeUTF8(Const s:String):Boolean;
Begin
Result:=Pos(#208,s)<>0;
End;
выдаст очень сильноверновероятный результат :)
Медвежонок Пятачок (2009-03-16 19:14:00) [11]Так и определяет. На байты смотрит и определяет.
Больше-то смотреть не на что.
пикассо (2009-03-16 19:08:00) [12]
> Palladin © (16.03.09 18:31) [8]
я одно большое ухо
> Медвежонок Пятачок © (16.03.09 18:32) [9]
> Много байтов $D0
что это?
А как какой-нибудь NotePad это определяет?
Медвежонок Пятачок (2009-03-16 18:32:00) [13]Много байтов $D0 - значит наверное может быть точно это наверное utf-8
:)
Palladin (2009-03-16 18:31:00) [14]да в общем то никак, но предположить можно :)
пикассо (2009-03-16 18:24:00) [15]
> Медвежонок Пятачок © (16.03.09 18:19) [6]
мне нужна процедура IsTextUtf8()... или как ее сделать.
Медвежонок Пятачок (2009-03-16 18:19:00) [16]утф-8 это не юникод, а транспортное представление.
как base64, например.
пикассо (2009-03-16 18:17:00) [17]
> Palladin © (16.03.09 18:05) [3]
ну я не знаю... если выполнить Utf8ToAnsi, то появляется читабельный текст...
> sniknik © (16.03.09 18:07) [4]
как быть-то? Строка может быть формата utf8 - надо переводить...
sniknik (2009-03-16 18:07:00) [18]насколько знаю utf8 это не совсем юникод... даже файлы могут быть как с BOM так и без него, т.е. это попросту соглашение типа "вот эту строку нужно интерпретировать так". но если нет символов > #128 то строка автоматом будет = ansy/oem.
Palladin (2009-03-16 18:05:00) [19]ну значит она не является unicode :)
пикассо (2009-03-16 18:02:00) [20]
> Palladin © (16.03.09 17:57) [1]
не желает(