Комментарии 25
А что, на vbscript кто-то пишет?
На jscript, кстати, эти функции пишутся тривиально:
* идея взята из комментария на phpjs.org
На jscript, кстати, эти функции пишутся тривиально:
function utf8_decode (str) { return unescape(encodeURIComponent(str)); }
function utf8_encode (str) { return decodeURIComponent(escape(str)); }
* идея взята из комментария на phpjs.org
Мне недавно как раз потребовалось автоматом перегонять текст из UTF8 в юникод, и я уже почти изобрёл велосипед, но наткнулся на маленькую утилиту uniconv, которая меня очень выручила.
Может кому-нибудь тоже пригодится.
Может кому-нибудь тоже пригодится.
«Символы же с кодами от 128 кодируются 2-мя байтами, с кодами от 2048 — 3-мя, от 65536 — 4-мя. Так можно было бы и до 6-ти байт дойти, но кодировать ими уже ничего.»
facepaw.jpg
1 байт — это 8 бит, следовательно максимальное число, записывание им равно 256 (2 в 8 степени), следовательно 2 байта — это 2 в 16 степени, или 65536. Следовательно 3 байта — это 65536*256 или 16777216.
facepaw.jpg
1 байт — это 8 бит, следовательно максимальное число, записывание им равно 256 (2 в 8 степени), следовательно 2 байта — это 2 в 16 степени, или 65536. Следовательно 3 байта — это 65536*256 или 16777216.
Да, вот только запись числа, кодируемого 1 байтом информации, в шестнадцатиричном виде занимает 2 байта.
Если один байт полностью использовать под кодирование символа, то разобрать сколько их там еще осталось нельзя будет… Поэтому, если код символа больше 128, то он уже кодируется двумя байтами.
Посмотрите внимательно на схему преобразования. Некоторые биты в UTF-8 представлении символов являются вспомогательными, чтобы можно было при разборе данных понимать, сколько байт считывать для очередного символа.
да, уже прочитал. Минусуйте :)
Спасибо, неплохо написано. Что могу добавить:
Это не так, первые 255 unicode code points соответствуют Latin-1 а не ASCII.
Это не так. До 4-х байт UTF-16 обрезали для совместимости по ассортименту code points с UTF-16, это определено RFC3629. Более того, обрезано оно не до 4-х байт, а до 0x10FFFF code points, тоесть четвертый байт используется не целиком.
Начало дублирует ANSII, а дальше остаток латиницы, кирилица, другие европейские и азиатские символы
Это не так, первые 255 unicode code points соответствуют Latin-1 а не ASCII.
Так можно было бы и до 6-ти байт дойти, но кодировать ими уже ничего.
Это не так. До 4-х байт UTF-16 обрезали для совместимости по ассортименту code points с UTF-16, это определено RFC3629. Более того, обрезано оно не до 4-х байт, а до 0x10FFFF code points, тоесть четвертый байт используется не целиком.
Ну вот… Начало хорошее, но дальше Википедии вы не дошли и получился не соответствующий стандарту Unicode велосипед. Почему? Например, потому что вы позволяете кодировать в UTF-8 старшие и младшие суррогаты. Также неправильно обрабатываются overlong sequences и ошибочные последовательности. Эти все вещи должны заменяться на специальный кодпоинт и производиться восстановление после ошибок строго так, как написано в стандарте.
Можете проверять свой декодировщик на тесте:
www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
Можете проверять свой декодировщик на тесте:
www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
А так как ничего рабочего не нашел, то пришлось писть/дописывать самому.
Кхм-кхм :).
habrahabr.ru/blogs/php/113715/
ничего не сказано про точки кода — базовое понятие utf.
Блин, это ж бейсик! Последний раз лет 15 назад его видел:)
VBScript имеет в своем распоряжении компонент ADODB.Stream, которым Windows комплектуется по-умолчанию. Это вполне себе почти «встронное» средство для работы с UTF-8.
offtopic: «Так можно было бы и до 6-ти байт дойти, но кодировать ими уже ничего.»
в конце «нЕчего» ☺️
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
UTF-8: Кодирование и декодирование