在Unicode环境下,如何将CString转换为String?

问题描述 投票:0回答:1
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。

c++ windows visual-c++ unicode mfc
1个回答
0
投票

您已将问题命名为

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 位)。

© www.soinside.com 2019 - 2024. All rights reserved.