我正在尝试从数组中提取确切的“ 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字符。 所以编译器问题也需要知道。