Unicode с прямым порядком байтов некоторые символы не получают должным образом из массива wchar_t - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь извлечь из массива точный символ «Юникод с прямым порядком байтов».

Значения, которые я непосредственно взял из файла с использованием байтов с прямым порядком байтов.Я использую против 2015, MFC Framework (поддержка Unicode).

значения: ? 亙 ? ? 亙 亙 ? ? Val ? ?

Таким образом, эти значения непосредственно взяты из файла в массив и без изменения этих значений в том же массивеи возможна прямая печать в другой текстовый файл в формате с прямым порядком байтов в Юникоде.Но изменение некоторых символов приводит к неверному результату.

Непосредственно записывается в файл editor.cpp

wchar_t chr[] = {L'?', L'亙', L'?', L'?', L'亙', L'亙', L'?', L'?', L'V', L'a', L'l', L'?', L'?'};

wchar_t chVal = (wchar_t) chr[0]; // getting � or a rectangle mark 

if(chVal == L'?')
  MessageBox(_T("Show msg")); // results wrong

wchar_t chVal = (wchar_t) chr[1]; // getting 亙 proper element.

if(chVal == L'亙')
  MessageBox(_T("Show msg")); // results correct

и исправляет результаты в 'V', 'a', 'l'

============================================= *

Прежде чем я поместилкод

wchar_t* ch = _wsetlocale(LC_ALL, _T("Chinese"));

это проблема с _wsetLocale?

в редакторе мы можем напрямую писать эти символы.Но во время отладки или exe результаты неверны.

, почему редактор не отображает некоторые символы во время отладки или выполнения.

================

обновлено:

// wcstring - массив wchar_t с символами Юникода

CStringW str;wchar_t wh;

System::Text::Encoding^ encodingWr = System::Text::Encoding::BigEndianUnicode;
StreamWriter^ writer = gcnew StreamWriter("Converted.txt", true, encodingWr );
//String^ line = reader->ReadLine();

for(int ct = 0; ct< ctTot; ct++)
{

    int ln = wcstring[ct]; // correct number

    wh = /*(wchar_t)*/ wcstring[ct]; //wrong

    str.Format(_T("UNNUM %d %lc"), ln, wh);

        /* https://docs.microsoft.com/en-us/cpp/text/how-to-convert-between-various-string-types?view=vs-2017*/
        // Convert a wide character CStringW to a
        // System::String.
        String ^systemstringw = gcnew String(str);
        //systemstringw += " (System::String)";
        //Console::WriteLine("{0}", systemstringw);
        //delete systemstringw;

    writer->WriteLine(systemstringw);
        delete systemstringw;

    OutputDebugString(str);

}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...