Как из кода (шестнадцатеричного) символа (текста) получить сам символ?
юникод 16 бит например "%D0%9C%"
proc s2t {t} {
set r ""
for {set i 0} {$i <= [string length $t]} {incr i 4} {
eval set s \\u[string range $t $i [expr $i + 4]]
set r $r$s
}
return $r
}
s2t "D09C"
так не получается
SP> Здpавствуй All ...
SP> Как из кода (шестнадцатеричного) символа (текста) получить сам символ?
SP> юникод 16 бит например "%D0%9C%"
SP> proc s2t {t} {
SP> set r ""
SP> for {set i 0} {$i <= [string length $t]} {incr i 4} {
SP> eval set s \\u[string range $t $i [expr $i + 4]]
SP> set r $r$s
SP> }
SP> return $r
SP> }
SP> s2t "D09C"
SP> так не получается
А это точно UTF-16, а не UTF-8? Обычно такими esc-последовательностями
именно UTF-8 пишут. А для него номер с eval \uXXXX не пройдет - оно все
же кодировка, а не просто число...
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: r...@jabber.ran.pp.ru
Это неправильный шелл. В нем дают неправильный перл. (С)энта
Это не unicode 16 bit, это побайтово заэскейпленный utf-8
Делать надо так:
proc unescape_utf8 {s}
# Заменяем вебовсеие эскейп-последовательности на tcl-евские
set s1 [regsub -all {%} $s {\\x} ]
# Преобразуем их в символы
set s2 [subst -nocommands -novariables $1]
# Преобразуем строку в 8-битный формат
set s3 [encoding convertto iso8859-1 $s2]
# И объясняем tcl, что она на самом деле utf-8
return [encoding convertfrom utf-8 $s3]
}
unescape_utf8 %D0%9C
М
В production code, естественно, надо первую операцию поаккуратнее
делать, чтобы лишний знак процента в конце строки или появление
бэкслэшей в строке не вызвало ошибку при subst.
--
Я известный мастер по скалярной части.
06 Дек 07 18:14, Victor Wagner wrote to Slava Pikarevskij-Ushakov:
VW> unescape_utf8 %D0%9C
VW> М
на случай utf-8, у меня была такая функция
proc ses1tks {teksto} {
set rezulto ""
for {set i 0} {$i <= [string length $teksto]} {incr i 2} {
set rezulto "$rezulto[eval \\x[string range $teksto $i [expr $i + 2]]]"
}
set rezulto [encoding convertfrom utf-8 $rezulto]
return $rezulto
}
В натуре utf-8
tclsh
>set s [encoding convertfrom utf-8 [eval set qq [regsub -all -- %
>%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D1%80%D0%B8 \\x]]]
Модуляри
Эта задача интерпретации текста из УРЛ.
Меня ввело в заблуждение что у википедии одно байтовая кодировка, а у гугла 2-х
байтовая - он акцентирует на не американскости каждого символа.
А как обратную задачу выполнить, получить десятичный или 16-й код символа?