【问题标题】:How many Windows users have UTF-8 set as the code page? [closed]有多少 Windows 用户将 UTF-8 设置为代码页? [关闭]
【发布时间】:2019-12-14 11:03:10
【问题描述】:

据我了解,不鼓励使用接受字节的 Windows 文件系统函数(带有 A 后缀的函数)(我没有找到官方弃用通知,但例如 Python 已弃用它们)。

在 Unix 派生系统上,文件名存储为字节。编码未定义,但许多系统配置为将文件名解释为 UTF-8。

从最近开始,似乎可以在 Windows 上将代码页设置为 UTF-8。是否可以估计有多少 Windows 用户拥有该代码页集?在 Windows 上使用字节接受文件系统 API 是否有意义,类似于在 Unix 派生系统上使用 POSIX API(例如,将某些应用程序从 Linux 移植到 Windows 时)?

【问题讨论】:

  • 致对这个问题投反对票的人:我知道这个问题可能很难以好的方式提出。您能就如何改进问题提出建议吗?
  • 不可能回答“多少”部分。另一个问题是主观的。但答案肯定是使用 8 位 API 没有意义。虽然在 Windows 还没有准备好的地方使用 UTF8 可能会很方便。
  • @DavidHeffernan 在 Linux 上,也无法估计有多少人使用 UTF-8 作为系统编码。尽管如此,现在大多数人似乎都认为每个人都在使用 UTF-8。我故意没有问有多少人设置了该代码页。我问是否可以进行估算。
  • @DavidHeffernan 所以你的回答是“不,不可能估计有多少”和“Windows 还没有准备好在所有地方使用 UTF-8”。你认为有可能以一种可以作为答案发布的方式重申我的问题吗?
  • 没有。我认为没有任何方法可以提出这个问题而不吸引有效的近距离投票。

标签: windows winapi utf-8 codepages


【解决方案1】:

只有最新版本的 Windows 10 允许您将默认代码页设置为 UTF-8。这个默认关闭的功能被标记为 Beta 并且有几个兼容性问题,所以我猜这个百分比很低。

实际数字无关紧要,因为CreateFileA 只是要转换字符串并无论如何调用CreateFileW,最后,将向内核发送一个UTF-16LE 文件名。 NTFS 将文件名字符存储为 16 位值,Windows 将它们解释为 UTF-16LE 字符串(但不验证它们 AFAIK)。

【讨论】:

  • 感谢您的有用回答。你有资料证明它是一个测试版功能吗?兼容性问题是否记录在某处?
  • UI 本身显示为 BETA,但我不确定何时/是否已将其删除。请参阅stackoverflow.com/q/56419639/3501 了解至少一个问题
  • 将系统区域设置为 UTF-8(代码页 65001)的一个问题是系统 OEM 代码页被用作控制台 (conhost.exe) 的默认值。将控制台的输入代码页设置为 UTF-8 将通过 ReadFileReadConsoleA 读取输入限制为 7 位 ASCII,因为在内部它不支持编码为多字节编码,并且 UTF-8 是每个非 2-4 字节ASCII 码点。它使用固定的内部缓冲区调用 WideCharToMultiByte,假定每个代码点 1 个字节(或 DBCS 代码页的每个代码点 2 个字节)。结果中的每个非 ASCII 字符都替换为 null。
猜你喜欢
  • 1970-01-01
  • 2012-01-26
  • 2012-03-10
  • 2012-02-01
  • 2021-03-04
  • 2010-10-06
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
相关资源
最近更新 更多