我有一个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:
答案 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代码页中这些字符的值)。
我猜你是在一个使用西里尔字母的斯拉夫地区。