C# 如何检测带有不可打印字符的unicode字符串?
我将Unicode字符串存储在数据库中。有些字符编码是错误的,它现在显示的不是该语言的实际字符,而是毫无意义的字符。如何解决此问题?有没有办法检测字符串是否有错误的编码?mojibake(日语俚语“mojibake”在英语中被使用,因为日本作为一个早期大量使用计算机的非西方国家的历史地位意味着这个问题在那里经常遇到)的问题是,字符本身通常是有效的,但是毫无意义,要100%准确地检测出来要困难得多 您需要做的第一件事是识别数据真正使用的编码,数据读取时使用的编码,并编写一个转换器来撤销该编码 例如,如果UTF-8被错误地解释为ISO 8859-1,那么您可能希望读取该流,并创建将其编码回ISO 8859-1的二进制流,然后创建将该二进制流读取为UTF-8的文本流,这是第一步应该做的 现在是最难的部分,找到不正确的流。如果您可以通过一些非启发式的方法来实现这一点,那么这就是方法(例如,如果您知道在特定的id号范围内添加的每个记录都是无效的,请使用该方法) 如果不能做到这一点,您最好的办法是进行如下启发:C# 如何检测带有不可打印字符的unicode字符串?,c#,unicode,character-encoding,C#,Unicode,Character Encoding,我将Unicode字符串存储在数据库中。有些字符编码是错误的,它现在显示的不是该语言的实际字符,而是毫无意义的字符。如何解决此问题?有没有办法检测字符串是否有错误的编码?mojibake(日语俚语“mojibake”在英语中被使用,因为日本作为一个早期大量使用计算机的非西方国家的历史地位意味着这个问题在那里经常遇到)的问题是,字符本身通常是有效的,但是毫无意义,要100%准确地检测出来要困难得多 您需要做的第一件事是识别数据真正使用的编码,数据读取时使用的编码,并编写一个转换器来撤销该编码 例如
Encoding.Default.GetString(Encoding.UTF8.GetBytes(testString))
例如:
Encoding.Default.GetString(Encoding.UTF8.GetBytes("ç"))
返回“ç”.问题出在哪里:存储字符串还是检索字符串?它们是否正确存储在数据库中?请尝试用当前代码的相关片段来回答此问题。数据库中的字符串已损坏。需要立即修复这些条目。这意味着它们未正确存储。请尝试缩小pr范围查看它们何时丢失的问题。DB存储unicode没有问题,我做了一个手动输入,工作正常。原本打算将字符串发送到DB的程序已经修复了问题。现在,我需要获取损坏的字符串,修复它们并将其重新发送到DB。必须自动检测损坏的字符串并将其重新发送到DB。您可以如果你在程序中记录错误,我只会得到一个直接可用的答案。