Character encoding 解码不正确的UTF-8字符串

Character encoding 解码不正确的UTF-8字符串,character-encoding,Character Encoding,我有一个小问题,错误编码的数据已经进入数据库的方式。根据我的研究事实发现,我认为字符串数据是直接从包含非utf8字符的页面复制的,我认为是ISO-5589-1 首先,我已经找到了阻止这种情况发生的方法,并将采取措施在将来阻止这种情况发生,但现在为了减轻损害,我需要知道这种编码错误的情况是否可以扭转,以便我能够获得预期的数据 在我的搜索中,我发现了预防措施,但没有解决已经错误编码的数据的方法 以下是数据片段: ÃÆÃÆÃâà 仅仅看一下它似乎并不明显,但复制它并粘贴到纯文本编辑器中也会显示未显示

我有一个小问题,错误编码的数据已经进入数据库的方式。根据我的研究事实发现,我认为字符串数据是直接从包含非utf8字符的页面复制的,我认为是ISO-5589-1

首先,我已经找到了阻止这种情况发生的方法,并将采取措施在将来阻止这种情况发生,但现在为了减轻损害,我需要知道这种编码错误的情况是否可以扭转,以便我能够获得预期的数据

在我的搜索中,我发现了预防措施,但没有解决已经错误编码的数据的方法

以下是数据片段:

ÃÆÃÆÃâÃ
仅仅看一下它似乎并不明显,但复制它并粘贴到纯文本编辑器中也会显示未显示的字符

作为一个整体,我对角色集是非常陌生的,而且通常不熟悉;我不知道你是否需要更多的信息?我可以说,这是捕捉到的灯堆栈,如果这有帮助


提前谢谢。

这取决于到底发生了什么。作为一个非常快速的入门,当以某种编码表示文本的字节使用不适当的编码进行解释时,就会发生这种情况。例如,这些字节表示UTF-8中编码的文本Fö:

46 C3 B8 C3 B6
46代表F,C3 B8和C3 B6分别代表ø和ö。 不按照UTF-8规则,而是按照拉丁语-1规则解释这些字节将给出以下字符:

FøÃ∗

五个字符,拉丁-1表中每个字节一个字符

在这种情况下,误解是无损的,即UTF-8文本的每个字节在拉丁语-1中都有意义。另一方面也不能保证。以拉丁语编码的Føö1为例:

46 F8 F6
只有三个字节,拉丁1表中的每个字母对应一个字节。但是,无法在UTF-8中对此进行解释,因此字节序列F8 F6在UTF-8中无效。如何处理这个案件取决于译员;它可以做任何事情,从抛出一个异常,到用问号或其他占位符替换字符。在这种情况下,转换是有损的;由于这是一个无效的操作,因此结果无法保留准确的输入

要想挽回这样的不幸,你首先需要弄清楚问题是否有损。如果是的话,那真是倒霉。如果它是无损的,您可以简单地通过解释和/或以正确的顺序将数据保存在另一种编码中来反转转换

如果UTF-8数据被解释为拉丁语-1数据,但随后错误地从拉丁语-1转换为UTF-8,则可以通过将结果从UTF-8转换为拉丁语-1并将结果解释为UTF-8来逆转这种情况

弄清楚你的案子发生了什么,好好玩玩


阅读。

什么样的数据库?如何编码/解码?这是一个PostgreSQL数据库,我不认为有任何编码或解码被明确使用。请显示您的代码。