反转unicode txt文件的字节

时间:2013-05-15 10:28:00

标签: c#

我有一个Unicode文件1.txt。该文件的文本:“12345” 如果从字节数组中读取字节数,则会得到12个字节:

  

255 254 49 0 50 0 51 0 52 0 53 0

没关系。 我无法理解的是,如果我像这样反转字节:

  

0 53 0 52 0 51 0 50 0 49 254 255

C#方法Encoding.Unicode.GetString(byteArray)返回㔀㐀㌀㈀㄀�这是正确的,但记事本显示5 4 3 2 1юя,为什么?

您可以找到字节反转方法here

1 个答案:

答案 0 :(得分:3)

您的文本文件可能编码为UTF16。

前面的两个字节是Byte Order Mark (BOM),不是文本的一部分。

你不能改变它们。所以你应该做的是跳过前两个字节并反转其余的字节。

但是这也会给你带来麻烦,因为你不能只是反转UTF16代码中的字节 - 它会为你提供一个完全不同的字符代码,或者代码无效的代码。

无论如何,当您撤销订单时发生的事情是,最终结果是BOM卡在最后形成无效的UTF16代码,恰好是“?”在你看到的最后一个字符,它也会扰乱所有其他字符的编码。

但是,记事本似乎是使用ANSI编码打开文件,可能是您当前语言环境使用的代码页。

文本文件包含字节0 53 0 52 0 51 0 50 0 49 254 255,记事本将0转换为空格,小于0x80的其他值转换为ASCII字符,而254转换为ю,255转换为{ {1}}(我假设是您当前语言环境的ANSI代码页中这些字符的值)。

我猜你是在一个使用西里尔字母的斯拉夫地区。