Как создать многобайтовые символы в C

во время моего изучения кодировки символов в C и c++ я наткнулся на два общих способа кодирования: многобайтовые символы и широкие символы. Чтобы лучше понять эти системы (преимущества и недостатки), я хотел бы привести несколько примеров. Выполнение примеров с широкими символами не является проблемой из-за собственной поддержки с типом wchar_t. Но когда я хотел создать строку, содержащую так называемые многобайтовые символы, я пришел к проблеме.

Как может Я фактически создаю многобайтовую символьную строку, которая использует кодировку, работающую с массивом символов (используя Visual C++)? Этот вид кодировки действительно существует:http://www.gnu.org/software/libc/manual/html_node/Shift-State.html. Но я читал только об этом и никогда не видел реального примера. Или вам нужно создать свою собственную кодировку для такого рода строк?

1 ответов


если вы можете создать широкий символьный строковый литерал, просто опуская L, вы должны дать многобайтовый символьный строковый литерал с определенной кодировкой реализации (gcc имеет возможность выбрать его, я не знаю о visual C++).

если у вас есть широкая символьная строка, вы можете получить эквивалентную многобайтовую строку в соответствии с языковым стандартом C, используя функции wcstombs (in <stdlib.h>) и wcsrtombs (in <wchar.h>).

C++ locale system также предоставляет способ чтобы сделать это преобразование. (Ищите in и out член codecvt фасет, я не буду предоставлять здесь учебник по их использованию, на сайте cppreference есть примеры кодов, например для из).

Я не уверен, что вы сможете легко найти поддержку либо в Unix, либо в Windows для кодирования со сдвиговым состоянием. Вы должны искать кодировку для Китая, Японии, Кореи, Вьетнама (например,ISO 2022-JP, но мне кажется, что Unix, как правило, использовать EUC-JP вместо этого и Windows Shift JIS).