irc.lv присылает мне письма, которые мой ридер не понимает.
нужно узнать, что написано вот тут:

Поздравляем!

irc.lv шлёт якобы в utf-8, по крайней мере он добавляет заголовок в тело письма:
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">

но на самом деле - это не настоящий utf-8, в utf-8 русские буквы должны быть в виде &#XXX

вот таблица соответствий cp1251 и utf-8:
http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT

в php конвертация делается:
$str =iconv( "cp1251", "utf-8", $str);

после конвертации текст должен выглядеть так:
&#x41C;&#x443;&#x43C;&#x438;&#x442;&#x440;&#x43E;&#x43B;&#x44C;: &#x438;&#x43A;&#x440;&#x430;

такой текст прекрасно понимает IE и прочие браузеры при выставлении кодировки просмотра utf-8

Комментарии (22)

wad (56) 23. мая, 2008.г.  
 0 0
запусти iconv и всё увидишь, он конверирует именно в &#x41C;&#x443;&#x43C;&#x438;&#x442;&#x440;&#x43E;&#x43B;&#x44C;: &#x438;&#x43A;&#x440;&#x430;
Виртулис (35) 23. мая, 2008.г.  
 0 0
А нет, вру, все сложнее. Но факт в том, что ты не прав ) и &#x41C;&#x443;&#x43C;&#x438;&#x442;&#x440;&#x43E;&#x43B;&#x44C;: &#x438;&#x43A;&#x440;&#x430; это как раз таки не UTF-8 а 7-битное ASCII.
Виртулис (35) 23. мая, 2008.г.  
 0 0
Эм. В UTF-8 каждый символ представляется от 1 до 4 байтами, причем слева направо, причем если значение байта > 127, то следующий после него также относится к этому символу, иначе нет.

&#XXX; это абсолютно другое.
antoxz (28) 22. мая, 2008.г.  
 0 0
Иначе как жестокой жестокостью это не назвать. :/
wad (56) 22. мая, 2008.г.  
 0 0
ха, так "Ð" появилось уже тут, в дневнике, в результате какойто местной перекодировки. в оригинальном тексте их нет, там как раз много "P"
antoxz (28) 22. мая, 2008.г.  
 0 0
Латышская 1257. Я спросил, потому что визуально "Ð" в изобилии именно для пары utf-8,cp1252, а для utf-8,cp1251 — "Р".
wad (56) 22. мая, 2008.г.  
 0 0
cp1251 это русская кодировка, cp1252 вообщето латышская
wad (56) 22. мая, 2008.г.  
 0 0
а cp1251 - это сознательно? может быть, оно всё-таки в cp1252?

да я конечно пробую и cp1251 и cp1252
antoxz (28) 22. мая, 2008.г.  
 0 0
а cp1251 - это сознательно? может быть, оно всё-таки в cp1252?
wad (56) 22. мая, 2008.г.  
 0 0
не, у него проблемы -
C:\temp\ICONV\bin>iconv -f utf8 -t cp1251
iconv: conversion from utf8 unsupported
wad (56) 22. мая, 2008.г.  
 0 0
сейчас виндосовский iconv попробую
вот нашел тут -
http://sourceforge.net/project/showfiles.php?group_id=25167
antoxz (28) 22. мая, 2008.г.  
 0 0
Можно добавить ключ -c, чтоб пропускал недопустимое.
antoxz (28) 22. мая, 2008.г.  
 0 0
http://ru.wikipedia.org/wiki/Крокозябры . Там есть пример, что выходит, когда UTF-8 интерпретируется как cp1252. Как раз оно.
Ну а Поздравляем! означает "Поздравляем!"
% iconv -f utf8 -t cp1252
ПоздравлÑем!
ПоздравлÑем!
wad (56) 22. мая, 2008.г.  
 0 0
ну, можно и так сформулировать наверно.

проще для понимания изучить образец из http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT :

например
0xCE    0x041E    #CYRILLIC CAPITAL LETTER O

это буква 'О', её значение 0x041E в один байт не помещается, поэтому записывается как "&#0x41E;"

Поздравляем!  не может в utf-8 появится в принципе никак.
antoxz (28) 22. мая, 2008.г.  
 0 0
В названии UTF-8/16/32 число указывает, по сколько битов квантованы последовательности, представляющие символы.
wad (56) 22. мая, 2008.г.  
 0 0
почтовая программа врядли виновата, The Bat 1.02 тупой как валенок, и сам ничего не делает, даёт письма в том виде как они пришли. ожидать от него какой-то конвертации не стОит.
wad (56) 22. мая, 2008.г.  
 0 0
в utf-8 каждый символ представляется одним байтом, либо текстовой строкой типа &quot; &#x403 и т.п.
в utf-16 каждый символ представляется двумя байтами.
в utf-32 четырьмя.

BOPOH: конечно читаю, когда в онлайне.
antoxz (28) 22. мая, 2008.г.  
 0 0
По-моему, это почтовая программа виновата. У меня никаких проблем с письмами от irc.lv нет. Они действительно в UTF-8.
Не знаю терминологии, но &#xNNN; — это ASCII последовательности HTML, такие же, как &quot;. А в "настоящем" UTF-8 каждый символ представляется нефиксированной длины последовательностью байтов. Глядя на ту абракадабру (По...), можно заподозрить, что там как раз-таки пары байтов, но _каждый_ байт по какой-то причине стал самостоятельным символом. Я бы попробовал сохранить исходное почтовое сообщение (без каких-либо конвертаций) и открыть его чем-нибудь, что поддерживает UTF-8 (Notepad++?).
BOPOH (48) 22. мая, 2008.г.  
 0 0
wad - ты читаешь личные сообщения? :)
wad (56) 22. мая, 2008.г.  
 0 0
The Bat 1.02
потому что он в принципе не подвержен вирусам и бэкдорам.
но какая разница, не ридер должен исправлять ошибки кривых писем, а письма должны быть в правильном формате.
Загрузка комментариев...
Похожие записи