CString strfile = _T("C:\\Users\\A\\Desktop\\스캔\\LowerScanFile.ply"); //Korean
CString strfile = _T("C:\\Users\\A\\Desktop\\ScanFile_11_12\\LowerScanFile.ply"); //English
CString strfile = _T("C:\\Users\\A\\Desktop\\歯科医療機器\\LowerScanFile.ply"); //Chinese
CString strfile = _T("C:\\Users\\A\\Desktop\\München\\LowerScanFile.ply"); //German
wchar_t *wchar_str;
char *char_str;
int char_str_len;
wchar_str = strfile.GetBuffer(strfile.GetLength());
char_str_len = WideCharToMultiByte(CP_ACP, 0, wchar_str, -1, NULL, 0, NULL, NULL);
char_str = new char[char_str_len];
WideCharToMultiByte(CP_ACP, 0, wchar_str, -1, char_str, char_str_len, 0, 0);
[结果]
char_str = 0x0000027b188b8420“C:\Users\A\Desktop\스캔\LowerScanFile.ply”
char_str = 0x0000027e30dd8030“C:\Users\A\Desktop\ScanFile_11_12\LowerScanFile.ply”
char_str = 0x000001c91d7781b0“C:\Users\A\Desktop\Munchen\LowerScanFile.ply”
char_str = 0x000001dc30839530 "C:\Users\A\Desktop\?科?疗机器\LowerScanFile.ply"
“char_str”值仅在韩语和英语中正常转换。
我希望所有语言都能正常将 CString 转换为 String。
您已将问题命名为
String
,但没有这样的课程。实际代码显示 char*
,所以我认为您的意思是一组普通的 char
字符。
在 Visual C++ 中,
char
是 8 位。这些位的解释各不相同。几乎每个 API 都同意 char
是 ASCII 的超集,但除此之外,它几乎没有指定。您写道您处于“Unicode 环境”中,但您使用 CP_ACP
而不是 CP_UTF8
。 UTF-8 是在 char[]
中存储 unicode 字符的标准方式。但是,由于 Unicode 字符超过 256 个,因此每个 Unicode 代码点需要多个
char
。(这也适用于 Visual C++ 上的
wchar_t
。它是 16 位,但 Unicode 要求每个代码点 20 位)。