C# Byte[] Byte array to Unicode string
我需要从字节数组到字符串的快速转换。字节数组是Unicode字符串。
- "最快"会出现,但这在.NET下是不可能的(我认为是这样)。所以第二个最好的方法是"不进行转换,将数组复制到数组(其中第二个数组是字符串的"内部"字符数组)"。
从byte[]数组到string数组
1
| var mystring = Encoding.Unicode.GetString(myarray); |
从string到byte[]。
1
| var myarray2 = Encoding.Unicode.GetBytes(mystring); |
- @xanatos为什么使用var型?
- @亚历克斯,这是c,不是javascript。var不是一种类型。它是"右手表达式类型"的缩写(所以string(参见stackoverflow.com/questions/41479/use-of-var-keyword-in-c-sh‌&8203;arp)
- @抱歉,我不知道。谢谢。
- @xanatos,@alex技术上来说,javascript中的var不是您所说的类型。javascript中的var是一个关键字,这意味着我想在这里声明一个变量,稍后将推断出该类型。
- 在我的案例中,我不得不使用Encoding.ASCII.GetString而不是Encoding.Unicode.GetString,以使它起作用。
- @障碍,避免使用ASCII,这只是最后的手段,当你完全知道你在做什么和为什么。1)默认情况下,首先要玩的东西必须是utf8编码2)如果出于某种原因,您正在处理一个旧的非Unicode数据,您可以尝试编码。默认3)只有当您明确地要坚持使用0-127字节值范围和拉丁字符时,才可以尝试使用ASCII(7bit,适合8bit),在作者的情况下,很明显,数据是utf16编码的,这就是编码的原因。这里的unicode是正确的。这主要由inmemory blobs使用。
试试这个
1
| System.Text.UnicodeEncoding.Unicode.GetString |
utf8(我认为你的意思是"utf8"而不是"unicode")。因为,你只会得到中文符号。;)
也许这有助于改变…
1
| var mystring = Encoding.Unicode.GetString(myarray); |
为了…
1
| var mystring = Encoding.UTF8.GetString(myarray); |
:)
- 不,他的数据显然是UTF16(encoding.unicode)编码的。utf8和unicode(utf16)都可以完美地与中文和通用编码字符集(ucs)中的任何其他符号一起使用。在大多数情况下,对于数据序列化、持久化和传输,utf8确实是默认值。UTF16主要由InMemory数据的操作系统和框架使用,以降低编码成本。