我正在转换一系列字符串,这些字符串旨在使用特殊字体正确显示为可在任何地方使用的unicode版本。它只是一个美化的字符串替换集:
"e]" -> "ἓ"
等
我正在使用streamreader读取文本,该编码器将编码设置为UTF-8。一切顺利。但是有一些字符用于替换那些不起作用的标点符号。我可以在notepad ++(编码设置为UTF-8)中将它们看作十六进制序列,但是当我读取它们时,它们都会缩小到相同的字符(黑色菱形中的“无法显示”问号)。
StreamReader srnorm = new StreamReader("C:\\Users\\John\\Desktop\\bgt.txt", Encoding.UTF8);
string norm = srnorm.ReadLine();
我应该将其作为二进制文件阅读并在那里工作,还是我的编码非常错误?
(Full size image) 当我读到它时,我得到以下内容:
o] j ouvci。 MH。 avpola,BH | pollaplasi,ona evn tw / | kairw / |土特产品,TW |佳。 evn tw / | aivw / ni tw / | evrcome,NW | zwh.n aivw,nion
答案 0 :(得分:0)
C#字符串使用UTF-16。这是它们存储在内存中的方式。因此,您应该能够将字符串读入内存并替换字符而不会出现任何问题。然后,您可以将这些字符写回文件(如果我没有弄错的话,UTF8是读取和写入文件的默认字符编码)。 “?”只表示你输出字符串的控制台不支持这些字符,或者字节不是有效的编码。
这是Jon Skeet关于C#/ .NET字符串的a good article。