【问题标题】:Unicode vs. UTF-8Unicode 与 UTF-8
【发布时间】:2015-03-23 05:51:42
【问题描述】:

我相信 Windows 当前默认使用 UTF-16 表示“Unicode”,但未来可能不会这样。

因为这个原因,使用会不会更好

[System.Text.Encoding]::UTF8.GetString($someByteArray)

而不是以下?:

[System.Text.Encoding]::Unicode.GetString($someByteArray)

【问题讨论】:

    标签: powershell unicode utf-8 utf-16


    【解决方案1】:

    以后可能不会这样了。

    Unicode 不是潜在可变编码;它只是 Microsoft 对 UTF-16LE 的(令人遗憾的误导)名称。

    它不会改变。即使 Microsoft 转向以 UTF-8 或 UTF-32 原生实现 Windows API(没有任何迹象表明会发生这种情况),System.Text.Encoding.Unicode 也必须保持 UTF-16LE,因为这是 .NET 规范定义的方式。

    使用UTF8而不是Unicode会更好吗?

    如果字节数组包含 UTF-8 编码的字节,则使用 UTF8,如果它们是 UTF-16LE,则使用 Unicode

    如果您要选择使用什么编码来存储静态数据,出于空间效率的原因,UTF-8 通常是更好的选择。

    【讨论】:

    • 出色的答案。谢谢你。但是你怎么能确定微软不会改变它呢?如果他们愿意,是否允许他们更改 .NET 规范?如果他们这样做会有什么影响?
    • 他们当然可以更改.NET新版本中的任何API定义,但他们从未暗示Unicode、char或String的定义可能会发生变化,所以兼容性会很大——打破惊喜。无论如何,MS真的不愿破坏旧的 API。上次更改内部字符串编码是在从 Windows 9x 到 NT 的过渡期间,而旧的 (ANSI) API 至今仍可用。 (我们仍在处理这个遗留问题,C-stdlib 应用程序仍然默认使用 ANSI 字符串接口,并且 msvcrt 中的 UTF-8 支持中断。)
    【解决方案2】:

    首先,是的Windows defaults to UTF-16。我个人会使用 UTF-8,因为我编写的大多数应用程序都必须与 Linux 应用程序或某种形式的 http 进行通信,所以 UTF-8 更有可能。

    即使您的所有代码都用于 Microsoft 系统,也很容易转换为 UTF-8,如果 .NET 开始需要它,一个简单的替代正则表达式可以将所有代码转换为 Unicode (UTF-16)。

    【讨论】:

      猜你喜欢
      • 2016-05-03
      • 2014-02-13
      • 2013-11-19
      • 1970-01-01
      • 2014-06-24
      • 2010-12-26
      • 2010-09-06
      • 2018-01-14
      • 1970-01-01
      相关资源
      最近更新 更多