如何将像xD0这样的十六进制序列读入C#字符串?

如何将像xD0这样的十六进制序列读入C#字符串?,c#,encoding,utf-8,C#,Encoding,Utf 8,我正在将一系列旨在使用特殊字体正确显示的字符串转换为可以在任何地方使用的unicode版本。这只是一组华丽的字符串替换: "e]" -> "ἓ" 等等 我正在使用一个streamreader读取文本,它的编码是UTF-8。一切正常。但是有一些字符用来代替标点符号,但这些字符根本不起作用。我可以在记事本++中将它们视为十六进制序列(编码设置为UTF-8),但当我读取它们时,它们都会缩减为相同的字符(黑色菱形中的“无法显示”问号) 我应该把它作为二进制文件读取并从那里开始工作,还是我的编码非

我正在将一系列旨在使用特殊字体正确显示的字符串转换为可以在任何地方使用的unicode版本。这只是一组华丽的字符串替换:

"e]" -> "ἓ"
等等

我正在使用一个streamreader读取文本,它的编码是UTF-8。一切正常。但是有一些字符用来代替标点符号,但这些字符根本不起作用。我可以在记事本++中将它们视为十六进制序列(编码设置为UTF-8),但当我读取它们时,它们都会缩减为相同的字符(黑色菱形中的“无法显示”问号)

我应该把它作为二进制文件读取并从那里开始工作,还是我的编码非常错误

() 当我读到这篇文章时,我得到了以下信息:

o] 尤维奇。嗯。�avpo�洛杉矶,波拉普拉斯,奥纳埃文太瓦/|凯尔瓦/|头,太瓦凯。evn tw/| aivw/ni tw/| evrcome,西北| zwh.n aivw,nion�

C#字符串使用UTF-16。这就是它们存储在内存中的方式。因此,您应该能够将字符串读入内存并替换字符,而不会出现任何问题。然后可以将这些字符写回文件(如果我没弄错的话,UTF8是读取和写入文件的默认字符编码)。's表示您将字符串输出到的控制台不支持这些字符,或者字节的编码无效


这里是Jon Skeet关于C#/.NET字符串的文章。

您好,欢迎来到Stack Overflow。请阅读有关提问的堆栈溢出帮助,以确保您的问题获得最佳答案的可能性最大。特别是:带有描述的代码非常棒。没有描述的代码是可以通过的。没有代码的描述几乎是无用的。你能编辑你的问题并告诉我们你在做什么吗?嗨@Amadan,我不知道要添加什么。我可以向您展示我的streamreader创建和ReadLine(),但我不认为它会那么有启发性。我已经添加了从我的ReadLine中得到的字符串。谢谢,它变得更清晰了(而且比抱歉更安全)。我收集到的
bgt.txt
是一个转换过的文件吗
0xCE
0xC5
0xD0
无效UTF-8。源代码具有导出到.txt的选项。它还允许导出到.rtf,从而在.rtf文件中生成类似于“”的序列。如果UTF-8无效,我是否有错误的编码?可能是错误的编码,是的。您所说的“源具有导出…的选项”是什么意思?如何生成文件以及指定其编码的内容?请注意二进制表示:
0xCE
本身是UTF-8编码中的有效字符。更具体地说,如果是UTF-8,则它将是两字节序列的第一个字节,以下字符需要介于
0x80
0xBF
之间;但是下面的字符是“a”(
0x61
)。这是否意味着我应该使用二进制读取器而不是尝试作为文本?@Amadan我试图向用户4147820解释的是,不必使用二进制读取器读取unicode文件,C#字符串可以存储unicode字符。您只需要确保您正在以正确的编码读取文件(并且文件没有损坏)。当我以UTF-16读取文件时,所有问题字符都会减少到0xFF(字节1:253,字节2:255)。
StreamReader srnorm = new StreamReader("C:\\Users\\John\\Desktop\\bgt.txt", Encoding.UTF8);
string norm = srnorm.ReadLine();