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

Вниз

Что не так с utf8?   Найти похожие ветки 

 
пикассо   (2009-03-16 17:50) [0]

Всем привет!
Нужно проверить, является ли строка строкой unicode и, если да, то перекодировать в ansi:

if IsTextUnicode(PChar(Text), Length(Text), nil) then
  Text := Utf8ToAnsi(Text);

но проверка не работает. Что я не так делаю?

PS. Я не так спросил или что-то не то?


 
Palladin ©   (2009-03-16 17:57) [1]

хм... попробуй IsTextUnicode(@Text[1], Length(Text), nil)


 
пикассо   (2009-03-16 18:02) [2]


> Palladin ©   (16.03.09 17:57) [1]

не желает(


 
Palladin ©   (2009-03-16 18:05) [3]

ну значит она не является unicode :)


 
sniknik ©   (2009-03-16 18:07) [4]

насколько знаю utf8 это не совсем юникод... даже файлы могут быть как с BOM так и без него, т.е. это попросту соглашение типа "вот эту строку нужно интерпретировать так".  но если нет символов > #128 то строка автоматом будет = ansy/oem.


 
пикассо   (2009-03-16 18:17) [5]


> Palladin ©   (16.03.09 18:05) [3]

ну я не знаю... если выполнить Utf8ToAnsi, то появляется читабельный текст...

> sniknik ©   (16.03.09 18:07) [4]

как быть-то? Строка может быть формата utf8 - надо переводить...


 
Медвежонок Пятачок ©   (2009-03-16 18:19) [6]

утф-8 это не юникод, а транспортное представление.
как base64, например.


 
пикассо   (2009-03-16 18:24) [7]


> Медвежонок Пятачок ©   (16.03.09 18:19) [6]

мне нужна процедура IsTextUtf8()... или как ее сделать.


 
Palladin ©   (2009-03-16 18:31) [8]

да в общем то никак, но предположить можно :)


 
Медвежонок Пятачок ©   (2009-03-16 18:32) [9]

Много байтов $D0 - значит наверное может быть точно это наверное utf-8
:)


 
пикассо   (2009-03-16 19:08) [10]


> Palladin ©   (16.03.09 18:31) [8]

я одно большое ухо


> Медвежонок Пятачок ©   (16.03.09 18:32) [9]


> Много байтов $D0

что это?

А как какой-нибудь NotePad это определяет?


 
Медвежонок Пятачок ©   (2009-03-16 19:14) [11]

Так и определяет. На байты смотрит и определяет.
Больше-то смотреть не на что.


 
Palladin ©   (2009-03-16 19:26) [12]


> пикассо   (16.03.09 19:08) [10]

нотепады тоже предполагают
хотя если речь идет о читаемом тексте, то

Function MaybeUTF8(Const s:String):Boolean;
Begin
Result:=Pos(#208,s)<>0;
End;


выдаст очень сильноверновероятный результат :)


 
пикассо   (2009-03-16 20:01) [13]


> Palladin ©   (16.03.09 19:26) [12]

спасибо, попрробую


 
Anatoly Podgoretsky ©   (2009-03-16 20:40) [14]

Не надо он шутит.


 
sniknik ©   (2009-03-16 20:42) [15]

> Больше-то смотреть не на что.
у файлов есть префикс - BOM (както это расшифровывается, не помню), хотя его может и не быть... см. [4], не уверен что тогда NotePad его правильно поймет.


 
sniknik ©   (2009-03-16 20:53) [16]

> не уверен что тогда NotePad его правильно поймет.
хм. понимает... тогда да действительно, он точно контекст смотрит.


 
Palladin ©   (2009-03-16 21:11) [17]


> BOM (както это расшифровывается, не помню)

ВсеОбъемныйМаркер :)
#FF#FE у юникодов, у утф8 нет ничего... приемщик должен быть уведомлен передатчиком, что прийдет утф8...


 
Anatoly Podgoretsky ©   (2009-03-16 21:22) [18]

> sniknik  (16.03.2009 20:42:15)  [15]

Byte Order Marker


 
sniknik ©   (2009-03-16 21:32) [19]

> у утф8 нет ничего...
есть! но не всегда. я делал обмен по utf8 и мне давали спецификацию. могу в проге посмотреть что за цифры там идут для него.


 
sniknik ©   (2009-03-16 21:41) [20]

прога не понадобилась, и так нашел.
http://www.unicode.org/faq/utf_bom.html#BOM
правда не вижу тут, что оно не всегда используется, но этому думаю ты поверишь, т.к. судя по всему только такие файлы и видел.


 
Vetal   (2009-03-16 22:54) [21]


> Palladin ©   (16.03.09 21:11) [17]



> #FF#FE у юникодов, у утф8 нет ничего... приемщик должен
> быть уведомлен передатчиком, что прийдет утф8...


Но это не мешает проверить утф8 текст или нет.
http://ru.wikipedia.org/wiki/UTF8



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

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

Наверх




Память: 0.51 MB
Время: 0.029 c
15-1235081456
AndreyV
2009-02-20 01:10
2009.04.26
Памяти Егора (Игоря) Летова


3-1220117523
mefodiy
2008-08-30 21:32
2009.04.26
Ошибка в триггере MySQL


15-1235768854
Kostafey
2009-02-28 00:07
2009.04.26
Решил посмотреть программы для сравнения файлов


2-1236973563
TStas
2009-03-13 22:46
2009.04.26
TabOrder в RunTime е


10-1155687227
big_bugzy
2006-08-16 04:13
2009.04.26
Как работать с интерфейсами ,если в TLB нету самого объекта?