Comments 25
А что, на vbscript кто-то пишет?
На jscript, кстати, эти функции пишутся тривиально:
* идея взята из комментария на phpjs.org
На jscript, кстати, эти функции пишутся тривиально:
function utf8_decode (str) { return unescape(encodeURIComponent(str)); }
function utf8_encode (str) { return decodeURIComponent(escape(str)); }
* идея взята из комментария на phpjs.org
-3
Мне недавно как раз потребовалось автоматом перегонять текст из UTF8 в юникод, и я уже почти изобрёл велосипед, но наткнулся на маленькую утилиту uniconv, которая меня очень выручила.
Может кому-нибудь тоже пригодится.
Может кому-нибудь тоже пригодится.
+2
«Символы же с кодами от 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.
-12
Да, вот только запись числа, кодируемого 1 байтом информации, в шестнадцатиричном виде занимает 2 байта.
+1
Если один байт полностью использовать под кодирование символа, то разобрать сколько их там еще осталось нельзя будет… Поэтому, если код символа больше 128, то он уже кодируется двумя байтами.
+1
Посмотрите внимательно на схему преобразования. Некоторые биты в UTF-8 представлении символов являются вспомогательными, чтобы можно было при разборе данных понимать, сколько байт считывать для очередного символа.
+2
да, уже прочитал. Минусуйте :)
+9
Спасибо, неплохо написано. Что могу добавить:
Это не так, первые 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, тоесть четвертый байт используется не целиком.
+4
Ну вот… Начало хорошее, но дальше Википедии вы не дошли и получился не соответствующий стандарту 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
+4
А так как ничего рабочего не нашел, то пришлось писть/дописывать самому.
Кхм-кхм :).
habrahabr.ru/blogs/php/113715/
0
ничего не сказано про точки кода — базовое понятие utf.
+1
Блин, это ж бейсик! Последний раз лет 15 назад его видел:)
0
VBScript имеет в своем распоряжении компонент ADODB.Stream, которым Windows комплектуется по-умолчанию. Это вполне себе почти «встронное» средство для работы с UTF-8.
0
offtopic: «Так можно было бы и до 6-ти байт дойти, но кодировать ими уже ничего.»
в конце «нЕчего» ☺️
0
Sign up to leave a comment.
UTF-8: Кодирование и декодирование