【发布时间】:2012-02-08 12:13:57
【问题描述】:
是否可以使用带有 UTF-8 字符串的 Windows API ANSI 函数?
例如,假设我有一个以 UTF-8 编码的路径。我可以调用CreateDirectoryA 或CreateFileA 并使用UTF-8 路径,还是必须在调用函数之前执行一些转换?
【问题讨论】:
-
哎呀。为什么会有人想要那个?我认为我们现在已经超越了 Windows ME(这是最后一个需要 ANSI API 的 Windows 版本)。它们应该已经消亡了,尤其是对于新开发的应用程序。
-
您从哪里获得 UTF-8 字符串?将您的应用程序转换为完全使用 UTF-16 字符串要容易得多,因为所谓的宽版本 Windows API 函数需要。正如 Joey 所说,总是 调用宽版本(带有
W后缀),而不是 ANSI 版本。这些已经过时了几十年。 -
@Joey:因为很多 C(++) 库(包括标准库!)更喜欢使用基于
char的字符串而不是基于wchar_t的字符串。如果 Windows 完全支持 UTF-8,那么您可以在整个程序中使用 UTF-8,而不必一直在 UTF-8 和 UTF-16 之间转换。 -
@dan04:UTF-16 是最好的处理 Unicode 编码(UTF-8 可以用于存储),请参阅这篇有趣的文章:unicode.org/notes/tn12(还要注意 C# 和 Java 都使用 UTF-其字符串类的 16 种编码)。
-
@user1149224 UTF-16 处理代码的复杂程度不亚于 UTF-8 处理代码。 UTF-32 处理代码要简单得多。
标签: winapi unicode encoding utf-8 ansi