Unicode大尾数某些字符无法从wchar_t数组正确获取

时间:2019-02-12 10:52:18

标签: c++ unicode mfc

我正在尝试从数组中提取确切的“ unicode big endian”字符。

我使用big endian直接从文件中获取的值。我使用vs 2015,mfc框架(unicode支持)。

  

值:亘亘亘Val

因此,这些值可以直接从文件获取到数组中,而无需更改同一数组中的这些值并直接打印为Unicode大字节序格式的另一个txt文件。但是更改某些字符会导致错误的结果。

直接写入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是带有Unicode字符的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字符。 所以编译器问题也需要知道。

0 个答案:

没有答案