【问题标题】:How to get UTF-16 byte array?如何获取 UTF-16 字节数组?
【发布时间】:2018-01-05 02:51:40
【问题描述】:

我有一个UTF-8 字符串,我需要得到UTF-16 编码的字节数组,那么如何将我的字符串转换为UTF-16 字节数组呢?

更新:
我的意思是我们有Encoding.Unicode.GetBytes() 甚至Encoding.UTF8.GetBytes() 函数来获取字符串的字节数组,那么UTF-16 呢?我们没有Encoding.UTF16.GetBytes(),那么如何获取字节数组?

【问题讨论】:

  • 您可能有一个字符串或一个 UTF-8 字节数组。 String 是包含字符的类型,与编码无关,因为编码仅用于字节数组表示
  • 另外,您尝试了什么,请发布您的代码
  • “我有一个 UTF-8 字符串”开头是什么意思?如果您有 System.String 的实例,它在内存中已经是 UTF-16。
  • C#中的字符串总是UTF-16,我相信没有办法转换它。你的UTF-8 字符串是什么样的?
  • @AfshinMehrabani:来自编码 MSDN:Unicode Gets an encoding for the UTF-16 format using the little endian byte order.msdn.microsoft.com/en-us/library/system.text.encoding.aspx

标签: c# encoding


【解决方案1】:

对于 little-endian UTF-16,请使用 Encoding.Unicode

对于大端 UTF-16,请使用 Encoding.BigEndianUnicode

或者,构造一个显式的 UnicodeEncoding 实例,它允许您指定字节顺序、是否包含字节顺序标记以及是否在无效数据上引发异常。

【讨论】:

    【解决方案2】:

    我有一个 UTF-8 字符串并且...

    不,你没有。那是不可能的。您可能有一个包含 UTF-8 编码文本的 bytes 序列(数组或流)。但不是string

    .net string 始终包含 Unicode(或更准确地说,UTF-16)。

    ...,那么如何将我的字符串转换为 UTF-16 字节数组?

    string myText = ...;  // some string, maybe from an UTF8 file or any other source
    byte[] utf16Data = Encoding.Unicode.GetBytes(mytext);
    

    该库定义范围 UTF7UTF8UnicodeUTF32。 Unicode .NET 框架上下文中的 UTF16。

    【讨论】:

    • Unicode 是 UTF-16 ...是的,在 .NET 方言中。对于世界其他地方,Unicode 是字符(代码点)的枚举,而 UTF-16 是这种枚举的一种实现,至少占用 2 个字节
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多