2010-09-09 2 views
1

Как преобразовать std :: string, закодированную в расширенном ascii, в utf8 с использованием Microsoft Visual Studio 2005?Преобразование из расширенного ascii в utf8

Я использую буфер протокола Google и жалуется, не являющиеся utf8 символы в моей строке, если я дам его без преобразования, это верно ...

+2

Что вы имеете в виду под «продлен ASCII "? –

+0

Нет такой вещи, как «расширенный ASCII». Сначала вам нужно узнать кодировку (например, ISO 8859-1 aka Latin-1 или некоторую кодовую страницу Windows). – DarkDust

+0

http://en.wikipedia.org/wiki/Extended_ASCII Думаю, я говорю об ISO-8859-1 – foke

ответ

2

Используйте MultiByteToWideChar, чтобы преобразовать строку в UTF-16, то используйте WideCharToMultiByte, чтобы преобразовать его в UTF-8.

+0

MultiByteToWideChar преобразует UTF-8 в UTF-16, это неправильно – Andrey

+0

@ Andrey: В прошлый раз, когда я изучал проблему (которую я свободно признаю давно), я не нашел другого пути, кроме маршрута через UTF-16. – sbi

+0

Символы ASCII с кодом> 127 недействительны с точки зрения UTF-8. и MultiByte означает UTF-8. это не сработает, скажу вам, просто попробуйте. может быть, вы (или я :)) неправильно поняли вопрос. – Andrey

1

Предположим, что таинственный Exntended ASCII - это только Latin1. Затем используйте маску из википедии:

110Y yyxx 10xx хххх

Поскольку у вас есть только 00..FF то у вас есть: 1100 00xx 10xx xxxx.

алгоритм преобразования

будет следовать, если символ кода < 127, то просто сбросить его, как есть, если> 127, то вы 0xC0 | ((x & 0xC0) >> 24) идет в первый байт, второй является ((x & 0x3F) | 0x80)

+0

В чем «маска из Википедии» вы говорите? Вы также не создали действительный UTF-8; В UTF-8 нет нулевых байтов. –

 Смежные вопросы

  • Нет связанных вопросов^_^