如何获取UTF-16字节数组?

25

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

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


2
你可能有一个字符串或UTF-8字节数组。字符串是一种包含字符的类型,不考虑编码,因为编码仅用于字节数组表示。 - njzk2
首先,“我有一个UTF-8字符串”是什么意思?如果您有System.String的实例,它在内存中已经是UTF-16了。 - Jon Skeet
@njzk2:不完全正确:字符串是UTF-16代码单元的序列。这在处理非BMP字符时非常重要。 - Jon Skeet
在内部,.NET框架使用UTF16来表示字符串,所以如果你只想获取.NET使用的确切字节,请使用System.Text.Encoding.Unicode.GetBytes。无论如何,该答案包含了获取UTF-16表示的代码。 - Jeroen Vannevel
2
@AfshinMehrabani:来自 MSDN 的编码信息:Unicode 使用小端字节序列作为 UTF-16 格式的编码方式。http://msdn.microsoft.com/zh-cn/library/system.text.encoding.aspx - Jeroen Vannevel
显示剩余3条评论
2个回答

37

11

我有一个UTF-8字符串,但实际上你没有。你可能有一个包含UTF-8编码文本的字节序列(数组或流),但不存在UTF-8字符串。

.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。在.NET框架的上下文中,Unicode是UTF16


8
Unicode是UTF-16...在.NET方言中是这样的。对于世界其他地方,Unicode是字符(代码点)的枚举,而UTF-16是至少2个字节上实现此枚举的一种方式。 - njzk2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接