【发布时间】:2011-06-14 23:07:19
【问题描述】:
我正在编写一些让我发疯的中间件。我正在寻找一些 I18N 专家来帮助我 - 这对我来说都是全新的。
目前这一切都在 Windows 中,但它也必须在 Linux 和 Mac 上运行,尽管我敢打赌这些会很容易。
我有一个系统(我无法触摸),它会为我提供一个 wchar_t* 形式的字符串。它接受 UTF-8 或当前语言环境的输入,并神奇地给我一个 wchar_t*。
我正在使用另一个 API,它只能将文件名作为 char*(我也无法触摸)。
所以我一直在做的是在 wchar_t* 中获取我的文件名并使用 Windows API 函数 WideCharToMultiByte 并将其转换为 char* 并将其传递给我的其他 API 函数。在 QA 决定使用日本操作系统之前,它工作得很好。现在 fopen(在我无法触及的 API 深处)失败了。
我已尝试在 WideCharToMultiByte 调用中同时使用 CP_ACP 和 CP_UTF8,即使文件名中包含日文字符,两者都可以在我的开发(美国英语)机器上工作。但两者都在日本操作系统上失败。
关于我应该如何处理这些文件名的任何提示?
【问题讨论】:
-
能否记录下每一步返回的字符数据,对比一下美英OS和日文OS?给出不同结果的第一个调用可能表明是哪个 API 导致了问题。
-
您能否尝试获取有关目标计算机上哪个区域设置处于活动状态的信息?
setlocale(LC_CTYPE, "");的结果字符串已经很有趣了。
标签: c++ windows winapi unicode internationalization