我将Unicode字符串存储在数据库中。一些字符编码是错误的,而不是显示语言的实际字符,它现在显示没有意义的字符。我该如何解决这个问题?有没有办法检测字符串是否有错误的编码?
答案 0 :(得分:3)
mojibake的问题(日语俚语“mojibake”在英语中被使用,因为日本作为一个非西方国家的历史地位,早期的计算机使用意味着这个问题遇到了很多)是角色一般它本身是有效的,但是无意义,这种方法难以100%准确地检测到。
您需要做的第一件事是确定数据实际所在的编码,读取数据的编码,然后编写转换器以撤消该数据。
例如,如果UTF-8被误解为ISO 8859-1,那么您需要读取流,并创建将其编码回ISO 8859-1的二进制流,然后创建将二进制流读取为UTF-8的文本流,应该首先完成。
现在,对于困难的部分,找到不正确的流。如果你可以通过某种非启发式的方式来做到这一点,那么这就是要走的路(例如,如果你知道在特定范围的id号码中添加的每条记录都是无效的,那就使用它。)
如果做不到这一点,最好的办法是按照以下方式进行一些启发式方法:
请注意,如果我们有与mojikbake对应的System.Text.Encoding对象,我们可以计算这样的序列。例如,如果您应该读取为UTF-8,那么您已将其读作系统的默认编码,那么您可以使用:
Encoding.Default.GetString(Encoding.UTF8.GetBytes(testString))
例如:
Encoding.Default.GetString(Encoding.UTF8.GetBytes("ç"))
返回“ç”。