其他信息:无法使用 转换Unicode字符\ uDFFF at 索引195到指定的代码页。
我做了一个算法,结果是二进制值(不同长度)。我将其转换为uint
,然后转换为字符并保存到字符串构建器中,如下所示:
uint n = Convert.ToUInt16(tmp_chars, 2);
_koded_text.Append(Convert.ToChar(n));
我的问题是,当我尝试将这些值保存到.txt时,我得到了前面提到的错误。
StreamWriter file = new StreamWriter(filename);
file.WriteLine(_koded_text);
file.Close();
我正在拯救的是:“忿췾᷿볯볯褟بّ ّ ّ㐻㐻筹筹筹... ... ... ... ... ... ... ... ... ... ...这是一些奇怪的迹象。
我需要的是将这些二进制值转换为某种字符串并将其保存到txt。我看到某处转换为UTF8会有所帮助,但我不知道如何。更改文件编码也会有帮助吗?
答案 0 :(得分:3)
您无法直接将二进制数据转换为字符串。字符串中的Unicode字符使用.NET中的utf16进行编码。该编码每个字符使用两个字节,提供65536个不同的值。然而,Unicode有超过一百万个代码点。为了实现这一目的,\ uffff上方的Unicode代码点(在BMP,Basic Multilingual Plane之上)使用代理对进行编码。第一个值介于0xd800和0xdbff之间,第二个介于0xdc00和0xdfff之间。这提供了2 ^(10 + 10)= 100万个附加代码。
您可能会看到这导致的位置,在您的情况下,代码会检测到与低代理配对的高代理值(0xdfff)。那是违法的。更多可能的事故,几个代码点是未分配的,有些是变音符号,当字符串被规范化时会被破坏。
你无法做到这一点。 Base64编码是跨文本流传输二进制数据的标准方法。它每个字符使用6位,3个字节需要4个字符。字符集是ASCII,因此接收程序将字符解码为二进制错误的几率是最小的。只有几十年前使用EBCDIC的IBM大型机可能会让您遇到麻烦。或者只是简单地避免编码到文本并保持二进制。
答案 1 :(得分:0)
由于您尝试将二进制数据编码为文本流this SO question已经包含对问题的答案:“如何将某些内容编码为base64?”从那里,纯ASCII / ANSI文本适用于输出编码。