Чего-то я не понимаю. Как ни кручу-верчу — на выходе у меня получается:
['A', 0, '1', 0, '2', 0, '3', '0' '0']
Насчет количества последних нулей не уверен — не смотрел до конца. Это — в wchar_t значениях. Я что-то снова запутался в UNICODE: что это за вариант Юникода такой и как мне получить простой массив символов из мультибайтного UTF8? Где собака порылась?
Здравствуйте, The Lex, Вы писали:
TL>Чего-то я не понимаю. Как ни кручу-верчу — на выходе у меня получается:
TL>
TL>['A', 0, '1', 0, '2', 0, '3', '0' '0']
TL>
TL>Насчет количества последних нулей не уверен — не смотрел до конца. Это — в wchar_t значениях. Я что-то снова запутался в UNICODE: что это за вариант Юникода такой и как мне получить простой массив символов из мультибайтного UTF8? Где собака порылась? TL>Перетаскивать вайдчары по одному вручную?
Здравствуйте, McQwerty, Вы писали:
TL>>Перетаскивать вайдчары по одному вручную? MQ>
MQ>// Если нет __int8, то
MQ>typedef unsigned char __int8;
MQ>bool utf8_to_ucs (const __int8* utf8, wchar_t* ucs) __THROW
MQ>
Не, ну существование rfc-шного декодинга понятно — все равно спасибо! Хотелось чего-то большого и чистого... А жизнь — ...
ЗЫ: задумавшись над правильными ключевыми словами поискал в залежах кода проекта по "utf8" и тут же нашел utf8_encodestr(...) Которая, правда, пока нигде не используется...
TL>Не, ну существование rfc-шного декодинга понятно — все равно спасибо! Хотелось чего-то большого и чистого... А жизнь — ...
Ну, а чего ещё ожидать? Другого способа перекодировать utf8 в ucs нет: только побайтно. Можно реализовать самому, можно покапаться в АПИ, предоставляемом ОС, библиотеками или ещё чем. Существование специальной функции в Mac OS возможно, но её реализация не сильно будет отличаться от предложенной.
TL>Насчет количества последних нулей не уверен — не смотрел до конца. Это — в wchar_t значениях. Я что-то снова запутался в UNICODE: что это за вариант Юникода такой и как мне получить простой массив символов из мультибайтного UTF8? Где собака порылась?
Если hfs хранит имена в том юникоде, который "родной" для мака, то этот юникод не такой как в windows.
Здравствуйте, The Lex, Вы писали:
TL>ЗЫ: задумавшись над правильными ключевыми словами поискал в залежах кода проекта по "utf8" и тут же нашел utf8_encodestr(...) Которая, правда, пока нигде не используется...
Правильные ключевые слова:
UTF-16
Little Endian
UTF-8
Тебе нужна перекодировка из utf-16 little endian в utf8. Гугл и википедия в помощь.
p.s. ucs-2 это устаревшее название utf-16. "wide char" и "ucs" это сокращения, некорректные вне контекста, обычно означающие “utf-16 with native byte order”.
Здравствуйте, Кодёнок, Вы писали:
Кё>p.s. ucs-2 это устаревшее название utf-16.
Не совсем, в UCS-2 один code point это всегда 16 бит, в utf-16 может быть и больше, но кратно 16. Идентичны они только при кодировании code points в диапазонах U+0000..U+D7FF и U+E000..U+FFFF.
Здравствуйте, Кодёнок, Вы писали:
К> p.s. ucs-2 это устаревшее название utf-16. "wide char" и "ucs" это сокращения, некорректные вне контекста, обычно означающие “utf-16 with native byte order”.
Нет, UCS-2 и UTF-16 совершенно разные кодировки. UCS-2 это только BMP диапазон (65536 codepoints), а UTF-16 это BMP + Supplementary (1 114 111 codepoints). Поэтому для UCS-2 длина символа всегда 2 байта, а для UTF-16 она можеть быть, либо 2, либо 4 байта (для представления диапазона supplementary используются суррогатные пары)
Здравствуйте, The Lex, Вы писали:
TL>Чего-то я не понимаю. Как ни кручу-верчу — на выходе у меня получается:
TL>
TL>['A', 0, '1', 0, '2', 0, '3', '0' '0']
TL>
откуда вы взяли этот выход? в дебугере посмотрели? видно, что вы его руками набивали и могли ошибиться. было бы хорошо, если бы привели фрагмент кода, какая строка на входе, какая на выходе, какая теущая локаль, какой sizeof(wchar_t) и тд.