LINUX.ORG.RU

С++, UTF-8 и ASCII


0

0

Пишу драйвер. Локаль - UTF-8. Устройству надо ASCII. Соответственно получаем проблему с русскими буквами. Как можно осуществить преобразование?

Заранее спасибо.


А не проще локаль сменить?

anonymous
()

Из UTF-8 в ASCII преобразовывать легко - режешь все символы с кодами больше 127 =)

Или тебе все-таки не ASCII нужно, а Latin-1?

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

доке на устройство написанно ASCII. Резать больше 127 не могу, потому как в том и дело что нужно русские буковки на устройство передавать.

Локаль ведь у конечных юзверей будет разная, не менять же всем потом из-за одного драйвера ее :((

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

Может быть использовать UTF-7

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

> доке на устройство написанно ASCII. Резать больше 127 не могу, потому как в том и дело что нужно русские буковки на устройство передавать.

О том и речь, что ASCII - это семибитная кодировка, в которой русских букв просто нет.

А что за устройство? Вообще, если сей девайс каким-то боком воспринимает кириллицу, то оно не может быть только ASCII - должна быть поддержка одной из восьмибитных или многобайтных русских кодировок. Если же оно просто данные куда-то записывает или передает, тогда кодируй в base64, например, и вперед...

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

> "Все поля представляют собой строки, состоящие из ASCII символов в диапазоне от 20h до FFh..."

Используй любую 8-битную кодировку.

anonymous
()

NAME
       iconv - perform character set conversion

SYNOPSIS
       #include <iconv.h>

       size_t iconv(iconv_t cd,
                     char **inbuf, size_t *inbytesleft,
                     char **outbuf, size_t *outbytesleft);

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

Угу в ядре особенно (драйвер я так понимаю - модуль ядра?).

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