Windows API ANSI函数和UTF-8

kre*_*tar 21 unicode winapi encoding ansi utf-8

是否可以使用带有UTF-8字符串的Windows API ANSI函数?

例如,假设我有一个以UTF-8编码的路径.我可以调用CreateDirectoryACreateFileA使用UTF-8路径,还是在调用函数之前必须执行一些转换?

dia*_*ler 19

接受的答案不再正确(从 Windows 版本 1903(2019 年 5 月更新)开始)。

应用程序现在可以将进程的活动代码页设置为 UTF-8。这允许...A函数 ( 和CP_ACP) 使用 UTF-8。执行此操作的清单如下所示

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity type="win32" name="..." version="6.0.0.0"/>
  <application>
    <windowsSettings>
      <activeCodePage xmlns="http://schemas.microsoft.com/SMI/2019/WindowsSettings">UTF-8</activeCodePage>
    </windowsSettings>
  </application>
</assembly>
Run Code Online (Sandbox Code Playgroud)

源和附加信息:使用 Windows UTF-8 代码页


cas*_*nca 15

不可以.MultiByteToWideChar用于将UTF-8转换为UTF-16,然后调用宽字符API,如CreateDirectoryWCreateFileW.

  • 我还要补充一点,因为Windows专门使用UTF-16,所以最好是跟风并且大部分都使用UTF-16,而只需要在需要读/写时转换为UTF-8外部来源. (12认同)
  • @casablanca:另一种提倡的方法是大多数情况下使用UTF-8,只有在与Windows界面交谈时才能转换为UTF-16和从UTF-16转换. (7认同)
  • 该答案已过时,请参阅下面更新的答案。 (3认同)