C# 不可逆字符串编码转换

C# irreversible string encoding conversion

提问人:Eric Qiang 提问时间:9/20/2023 最后编辑:Eric Qiang 更新时间:9/20/2023 访问量:59

问:

我使用库解析一个简单的json文件,内容用UTF-8编码,然后我发现这个令人困惑的事情:Newtonsoft.Json{"key": "强回声"}

byte[] data_utf8 = { 123, 34, 107, 101, 121, 34, 58, 32, 34, 229, 188, 186, 229, 155, 158, 229, 163, 176, 34, 125 };

Console.WriteLine(string.Join(", ", data_utf8));
Console.WriteLine(Encoding.UTF8.GetString(data_utf8));

var Ansi_String = Encoding.Default.GetString(data_utf8);
var Ansi_bytes = Encoding.Default.GetBytes(Ansi_String);
Console.WriteLine(string.Join(", ", Ansi_bytes));
Console.WriteLine(Encoding.UTF8.GetString(Ansi_bytes));

输出:

123, 34, 107, 101, 121, 34, 58, 32, 34, 229, 188, 186, 229, 155, 158, 229, 163, 176, 34, 125
{"key": "强回声"}

123, 34, 107, 101, 121, 34, 58, 32, 34, 229, 188, 186, 229, 155, 158, 229, 163, 63, 125
{"key": "强回??}

问题是如果我有喜欢,可以恢复吗?stringAnsi_String

---- UPDATE ----
我使用的是中文语言环境系统,所以上面的代码应该替换

Encoding.Default => Encoding.GetEncoding("gb2312")

C# .NET 编码 UTF-8

评论

2赞 Paweł Łukasik 9/20/2023
看起来它有效:dotnetfiddle.net/HhBFNB
2赞 Etienne de Martel 9/20/2023
提醒您,JSON 的唯一有效编码是 UTF-8。
1赞 Panagiotis Kanavos 9/20/2023
如果损坏的文本包含 ,则无法恢复数据。 是使用错误编码解码非 Unicode 文本时使用的错误替换字符。当字节或字节在目标代码页中没有相应的字符时,使用它???
3赞 Marc Gravell 9/21/2023
@GSerg Encoding.Default 在不同的环境中执行不同的操作;IIRC 在现代 .NET 上,它始终返回 UTF8,但在较旧的运行时上,它返回与计算机配置相关的编码;实际上,Encoding.Default 实际上不应该被使用,除非你专门想回答“这个系统上的 Encoding.Default 是什么?”这个问题,纯粹是为了学术兴趣
1赞 GSerg 9/21/2023
@MarcGravell 我可能选词不当。我的意思是“当碰巧是碰巧的编码时......等等”。这与鼓励这样做相反。Encoding.Default

答: 暂无答案