LINUX.ORG.RU

C & Юникод строка в нотации '\uXXX'


0

1

Как можно преобразовать строку вида «\u0442\u0435\u0441\u0442» в UTF8 строку? Может быть в iconv есть какая-то «кодировка» под это дело? Такой способ кодирования как-то стандартизован (номер ISO)? Гугление дало утилиту uni2ascii/ascii2uni, которая, судя по описанию, как раз преобразует escape-последовательности в unicode и обратно. Но это нужно делать из c-кода. Не хочется писать свой велосипед, но ничего стандартного не нашел. Может кто сталкивался?

Строка из примера - это «тест»

Посмотри в исходниках этой утилиты, как авторы это сделали.

schizoid ★★★
()

а в чем сложность то? циферки это код символа в hex, соответственно в твоем примере на символ по два байта

s0L
()

не понял… что ты хочешь преобразовать? L"\u0442\u0435\u0441\u0442" (wchar_t[]) или «\\u0442\\u0435\\u0441\\u0442» (char[])?

arsi ★★★★★
()
Ответ на: комментарий от s0L

Спасибо за RFC - то, что надо. Про сложность речи не было, интересовало наличие готового решения.

SilentBob
() автор топика
Ответ на: комментарий от arsi

не понял… что ты хочешь преобразовать?

Имелось в виду char some_string[] = «\\u0442\\u0435\\u0441\\u0442»;

SilentBob
() автор топика

Плохо ты гуглил. Есть iconv. А лучше исползовать для этого ICU.

Кроме того, что это за такая строка? Это массив кодпойнтов или строка в UTF16? В нормальной форме находится или нет? Требования по нормализации есть?

Macil ★★★★★
()
Ответ на: комментарий от Macil

Это строка ASCII символов, группа которых (6 символов) '\uXXXX' представляет собой (насколько я понял почитав RFC) кодпоинт для символов в BMP. Или это часть суррогатной пары в UTF-16 для символов не из BMP. XXXX - четыре hex разряда. Вообще, это часть JSON строки. Эту строку формирует php вызывая json_encode. ХЗ, зачем он (пых) эскейпит все подряд, согласно RFC на JSON этого делать не нужно.

Как может тут помочь iconv?

SilentBob
() автор топика
Ответ на: комментарий от SilentBob

Как может тут помочь iconv?

Да, тут iconv действительно не поможет. Поможет ICU. Хотя интерфейс у нее будте-нате, по-моему, ничего более приличного просто нет.

Macil ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.