【发布时间】:2025-12-16 13:40:02
【问题描述】:
如果我在仅 ANSI 代码页环境中。
此转换是否将wide char 转换为char:
char ansi_cstr[size_of_ansi_str];
WideCharToMultiByte(CP_ACP, 0, ansi_wstr.c_str(), -1, ansi_str, size_of_ansi_str, 0, 0);
std::string ansi_str = std::string(ansi_cstr);
等于跟随
std::string ansi_str = std::string(ansi_wstr.begin(), ansi_wstr.end());
和char 到wide char
wchar_t ansi_wcstr[size_of_ansi_str];
MultiByteToWideChar(CP_ACP, 0, ansi_str.c_str(), -1, ansi_wcstr, size_of_ansi_str);
std::wstring ansi_wstr = std::wstring(ansi_wcstr);
等于
std::wstring ansi_wstr = std::wstring(ansi_str.begin(), ansi_str.end());
这两种情况在仅 ansi 代码页的环境中是否保持相同的行为?
【问题讨论】:
-
真正的问题是为什么你会在 2014 年使用 ANSI 代码页?
-
更糟糕的是:ANSI 代码页 only 环境。我认为第一个支持 Unicode(通过 Unicows)的 Windows 是 Windows 95,所以这将是 1994 年的 Windows 3.1。20 岁。谈论遗留开发。话又说回来,我们仍然在这里看到 Turbo C++ 问题。
-
Windows 95/98/ME 是基于 Ansi 的操作系统。 UCS-2 在 NT4 中使用,然后在 Windows 2000 中被 UTF-16 取代。这两个产品线直到 XP 才合并为一个单一的 Unicode 操作系统。
-
@CodyGray 也许是因为,即使在 2018 年,很多 shapefile 的 DBF 仍然使用 0x57 语言驱动程序 ID?