从记事本保存和检索数据时遇到奇怪的事情

本文关键字:遇到 保存 记事本 检索 数据 | 更新日期: 2023-09-27 18:32:39

最近我试图用Unicode编码将数据保存在记事本中,但是当我尝试通过Unicode编码从记事本检索数据时,它出现了其他东西。 我实际保存在记事本中的是"((char)56774)",但我从记事本检索到的是"((char)65533)"。

代码如下所示:-

File.WriteAllText("Foo.txt", ((char)56774).ToString(), Encoding.Unicode);
string s = File.ReadAllText("Foo.txt", Encoding.Unicode);
char[] c = s.ToCharArray();

请告诉我哪里出错了,或者我应该如何从记事本中取回相同的字符。

提前致谢

从记事本保存和检索数据时遇到奇怪的事情

'uDDC6是一个低代理项对,因此它比您提供的字符更多,以便形成一个完整的角色。

可以使用自己的编码器确认它不支持此字符,该编码器在使用无效字符时引发异常。

var customEncoder = new UTF8Encoding(true, true);
File.WriteAllText("Foo.txt", ((char)56774).ToString(), customEncoder);
char c = Convert.ToChar(File.ReadAllText("Foo.txt", customEncoder));

请注意,这会在读取该字符时引发异常,这使您可以知道它是无效的。

根据您的要求,您可以直接输出字节:

File.WriteAllBytes("Foo.bin", BitConverter.GetBytes((char)56774));
char writtenCharacter = BitConverter.ToChar(File.ReadAllBytes("Foo.bin"), 0);