【发布时间】:2019-11-12 00:21:28
【问题描述】:
我有一个字符串如下
const string nameString = @"\xda\xa9\xd8\xa7\xd8\xb1\xd8\xa8\xd8\xb1";
我试过了:
var name = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(nameString));
不工作。
你可以在这里找到真实的人物:
https://utf8-chartable.de/unicode-utf8-table.pl?start=1536&number=128&names=-&utf8=string-literal
例如:
U+0631 ر \xd8\xb1
如何在 C# 中将其转换为可读的字符串?
【问题讨论】:
-
您希望返回什么字符串?我不清楚您是否真的期望 bytes 0xDA、0xA9、0xD8、0xA7 等的 UTF-8 解码...因为如果是这样,如果您可以可能 将
nameString改为字节数组,这样会好很多。 -
否则,您需要在 second
Encoding调用中使用Encoding.GetEncoding(28591),以便您可以将字符串视为ISO-8859-1 ...但从根本上说您正在使用字符串来表示任意二进制数据,这不是一个好主意。如果你能提供更多的上下文,那真的很有帮助。 (作为提示,“不工作”几乎从不很好地描述了故障模式。告诉我们您期望发生的事情与实际发生的事情。) -
@JonSkeet 请再看一遍帖子,我编辑了。
-
哎呀 - 我没有发现它是一个逐字字符串文字开始。哇!
-
你应该明白这是一个 NOP
Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(nameString))。它们是完全相反的(除非通过null)。