Member 12677926 Ответов: 1

С логикой проблемы не менее multibytetowidechar


iam преобразует некоторую строку ANSI на иврите в строку unicode с помощью
следующая методика:


nSize = MultiByteToWideChar(nlanguageCodePage, 0, chAnsiBuff, -1, NULL, 0);

MultiByteToWideChar(nlanguageCodePage, 0, chAnsiBuff, -1, chUniocodeBuff, 512);


у меня есть иврит - (кодовая страница windows 1255), так что я получу 1255 .... если какие-либо ненужные символы есть в ansi, он будет dispalay correclty в unicode ?

что именно это будет делать ( то есть первый параметр будет делать, если я буду определять иврит по-прежнему его преобразование proeprly)

пожалуйста, дайте мне знать, почему он не работает

Что я уже пробовал:

//CONVERTING TO UNICODE
nSize = MultiByteToWideChar(nlanguageCodePage, 0, chAnsiBuff, -1, NULL, 0);
MultiByteToWideChar(nlanguageCodePage, 0, chAnsiBuff, -1, chUniocodeBuff, 512);

// bom at starting
if (nBOM == 0) { arcOut.Write(&bom, 2); }
arcOut.WriteString(chUniocodeBuff);

Richard MacCutchan

Что "не работать" значит?
И почему вы используете фиксированный размер 512 во втором вызове, а не значение, возвращаемое в nSize?
И почему вы не проверяете возвращаемое значение во втором вызове?

Member 12677926

это нормально ...я пробовал с этим ... моя проблема не в том, чтобы получить желаемый вывод ...правильная строка в файле unicode hebrew

1 Ответов

Рейтинг:
0

KarstenK

Эта функция предназначена для преобразования Многобайтовый строка в широкий голец строки. Чтение документации по Не менее multibytetowidechar функция-это всегда хорошая идея.

Но когда ваш вклад кодировка ANSI вам лучше прочитать Как: преобразование между различными типами строк чтобы понять различные типы строк. Коротко: ANSI-char-это однобайтовый символ, но Многобайтовый и широкий символ может быть до четырех байт. Поэтому имейте в виду разницу при использовании оператора sizeof-operator и некоторых функций длины строки. Всегда проверяйте размеры перед конвертацией!!! Всегда ;-)