Windows CE, Unicode and Visual Studio 2008
Windows CE, Unicode and Visual Studio 2008
我正在尝试编写我们现有的Windows CE产品系列的多语言版本。我有一个 UTF8(无 BOM)编码文件,正在尝试读取它并将其显示在消息框中。
如果我将 Unicode 字符放在 CPP 文件中并以这种方式显示它,但有些字符不显示,我会有一些运气。
我尝试过 UTF16、UTF16-LE和 UTF16-BE 文件,但似乎没有一个能够显示。
我尝试过ifstream和wfstream以及CFile - 我也尝试过在谷歌搜索时找到的CStudioFile。我可以将文本保存回另一个文件并将其视为 Unicode - 我只是在我的 Windows CE 应用程序中看不到它。
注意:我已经在打开Unicode字符集的情况下进行了编译。
我还没有弄清楚正在读取文件的编码 - 但正如我所说,我可以将其保存回并将其读取为 Unicode 但不显示在对话框中。
任何帮助\指导,以使Unicode文本显示在消息框中。请注意,Windows CE的C++SDK非常精简,有很多新功能不可用,而且我必须在Visual Studio 2008中编译它。
编辑下面答案中的代码片段。消息框不显示正确的文本。这可能只是模拟器上的字体问题。
CFile file(L"c:\test\_utf8.txt", CFile::modeRead);
int filesize = file.GetLength();
CStringA strA;
file.Read(strA.GetBuffer(filesize), filesize);
strA.ReleaseBuffer();
CStringW strW = CA2W(strA, CP_UTF8);
strW.AppendChar(0);
MessageBoxW(0, strW, 0, 0);
Windows 使用 UTF16-LE
.使用 MultiByteToWideChar(CP_UTF8, ...)
将UTF8
转换为UTF16-LE
,然后使用 Windows API 函数显示UTF16-LE
"宽字符字符串"。
在 MFC 中,您可以使用
CFile file(L"c:\test\_utf8.txt", CFile::modeRead);
int filesize = file.GetLength();
CStringA strA;
file.Read(strA.GetBuffer(filesize), filesize);
strA.ReleaseBuffer();
CStringW strW = CA2W(strA, CP_UTF8);
strW.AppendChar(0);
MessageBoxW(0, strW, 0, 0);
我不确定 WinCE 中有什么可用。要使用C++标准库,请使用std::fstream
打开,读取并将std::string
转换为std::wstring
纯 API 中的另一个示例:
wchar_t* readfile(const wchar_t* filename)
{
HANDLE handle = CreateFileW(filename, GENERIC_READ, 0,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (handle == INVALID_HANDLE_VALUE) return NULL;
wchar_t *wbuf = NULL;
int len = GetFileSize(handle, 0);
if (len)
{
char *buf = new char[len];
DWORD temp;
ReadFile(handle, buf, len, &temp, 0);
int wlen =
MultiByteToWideChar(CP_UTF8, 0, buf, len, 0, 0);
wbuf = new wchar_t[wlen + 1];
MultiByteToWideChar(CP_UTF8, 0, buf, len, wbuf, wlen);
wbuf[wlen] = 0;
delete[]buf;
}
CloseHandle(handle);
return wbuf;
}
...
wchar_t *wbuf = readfile(L"c:\test\utf8.txt");
if (wbuf)
{
MessageBoxW(0, wbuf, 0, 0);
delete[]wbuf;
}
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何在MS Visual Studio 2019中运行QT UI
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Visual Studio Code - C++ Debugger 無法啟動
- Visual Studio 2019:插入多个C++风格的单行注释
- Visual Studio Code "undefined reference to `WinMain@16'"
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- Visual Studio中的函数声明和函数定义问题
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- Visual Studio mkl_link_tool.exe链接错误
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 不同的Visual Studio版本中缺少.dll
- 用Visual Studio在C++中嵌入Julia
- Visual Studio 2017循环自动向量化问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- Visual Studio在尝试读取resource.txt文件时崩溃
- Visual Studio 2017 不允许我创建 C++ 专用模板