Как я могу преобразовать wchar_t * в char * без потери данных?

#c #unicode #char #wchar-t

#c #юникод #символ #wchar-t

Вопрос:

Я использую японскую строку в качестве wchar_t , и мне нужно преобразовать ее в char* . Существует ли какой-либо метод или функция для преобразования wchar_t* в char* без потери данных?

Комментарии:

1. Какой язык вы используете? C?

Ответ №1:

Недостаточно сказать «У меня есть строка как wchar_t «. Вы также должны знать, в какой кодировке находятся символы строки. Это, вероятно, UTF-16, но вам нужно знать определенно.

Также недостаточно сказать «Я хочу преобразовать в char «. Опять же, вы должны принять решение о том, в какой кодировке будут представлены символы. JIS? Shift-JIS? EUC? UTF-8? Другая кодировка?

Если вы знаете ответы на два вопроса выше, вы можете выполнить преобразование без каких-либо проблем с помощью WideCharToMultiByte .

Ответ №2:

Что вам нужно сделать в первую очередь, это выбрать кодировку строки, такую как UTF-8 или UTF-16. А затем закодируйте ваши wchar_t[] строки в выбранной вами кодировке с помощью libiconv или другой подобной библиотеки кодирования строк.

Комментарии:

1. Привет, минхи, Не могли бы вы, пожалуйста, немного подробнее рассказать о предоставленном вами ответе

Ответ №3:

Вам нужно вызвать WideCharToMultiByte и передать идентификатор кодировки кодовой страницы для желаемой японской многобайтовой кодировки. Смотрите MDSN для этой функции. В Windows локальным многобайтовым набором является CP932, вариант MS для ShiftJIS. Однако, возможно, вы захотите отправить UTF-8 кому-то, кто этого хочет.