Я пытаюсь извлечь из массива точный символ «Юникод с прямым порядком байтов».
Значения, которые я непосредственно взял из файла с использованием байтов с прямым порядком байтов.Я использую против 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.поэтому проблемы с компилятором тоже нужно знать.