我一直在透过网络上透露透彻,似乎找不到带有这种转换的桌子。我发现的那些错误有一些错误,并且不太可靠,所以我已经寻找了一些官方桌子或相似的桌子,但是不幸的是我没有。

如标题中提到的那样,我想做的是,例如,知道“â±”代表(我已经知道的这个。波兰人)。

主要问题是我有一个php中的字符串,有时可能会像“eñe”(可以的那样)和其他人作为“eâ±e”。它是可读的。但是,如果可以的话,我不想更改它。为了做到这一点,我正在使用utf8_decode函数,但是如果字符串可读,它仍然会将“ñ”更改为“■”(但是白色)..所以这就是为什么我不能总是解码字符串,并且如果我使用MB_DETECT_ENCODING函数,我将始终将“ UTF-8”作为响应。.它没有什么帮助。

一旦我知道所有写作的UTF8位字符,例如“ n n”,“Å”等等。 utf8_decode所做的同样的事情。除非这里有人有更好的解决方案!

提前致谢!问候!

有帮助吗?

解决方案

你为什么要这样做?您要恢复损坏的数据左右吗?

它应该 真的 不作为通常业务代码流的一部分来完成。您需要做的就是确保WebApp的所有层都正确使用UTF-8。 PHP源,HTTP响应标头和身体,DB表,DB连接等。也可以看看 PHP UTF-8作弊地图.

如果你 实际上 想要作为一次性任务执行此操作以恢复损坏的数据,因此很高兴知道问题中的损坏数据表明UTF-8数据被错误地存储或显示为ISO-8859-1。您只需要将数据读取为ISO-8859-1,并以UTF-8的形式写入。一度。然后以正确的方式进行操作。

作为证据, ñ (Unicode字符“拉丁小字母n with tilde'(u+00f1))存在于Unicode中(UTF-8, ,一个多字节编码)字节 0xC30xB1. 。当这些字节使用单字节编码(例如ISO-8859-1)编码时,则 0xC3 变成 Ã0xB1 变成 ±. 。另请参阅 ISO-8859-1代码ePage布局.

其他提示

问题是一旦您拥有 Mojibake, ,没有可靠的方法将其转换回应意味着的意思。看 Wikipedia的这段 为了解释问题:

考虑包含德语单词的文本文件 毛皮 在ISO-8859-1编码中。现在,该文件使用文本编辑器打开,该文本编辑器假设输入为UTF-8。作为第一个字节(0x66)在范围内 0x000x7F, ,UTF-8正确将其解释为 f. 。第二个字节(0xFC)对于任何UTF-8编码字符的开始,不是法律价值。因此,文本编辑器可以用替换字符符号替换字节,以警告用户出现问题。最后一个字节(0x72)也在代码范围内 0x000x7F 并且可以正确解码。现在,整个字符串都这样显示: f�r.

不断成就的文本编辑器可能以UTF-8表格保存替换;然后,文本文件数据将看起来像这样: 0x66 0xEF 0xBF 0xBD 0x72, ,将再次显示在ISO-8859-1中 f�r. 替代者还破坏了原始字节,使得无法恢复想要的角色。

您需要从一开始就使用错误的编码来避免错误地解释文本。在破碎时修复它为时已晚。

您的问题是解释的问题,而不是转编码。在任何现代计算机上,ñ通常以二进制0xc3b1的形式输入,因为它是其UTF-8代码。如果您在旧的ISO-LATIN-15代码中解释(不转码),您将获得0xc3 =ã,其次是0xB1 =±。这就是为什么没有“表”:这是一个显示问题。

最好的办法是完全避免使用ISO-LATIN。这会给您带来很多问题。修复程序的真正方法是:在任何地方仅使用UTF-8,它将节省大量时间和头痛。

同时,如果您真的想将等效的ISO-latin-15字符串获取到UTF-8输入(如果您不右上,则不这样做),则可以将字符串传递给任何代码转换器, 要求它将UTF-8转换为ISO-Latin-15。您应该小心的一件事是双重跨编码。如果您有一个UTF-8字符串,并且错误地要求将ISO-Lating-15转换为UTF-8,那么您得到了一个UTF-8字符串,实际上说â±,即二进制0xC383C2B1。要恢复正确的UTF-8字符串,ANWSER是相同的:要求将您的操纵字符串从UTF-8转换为ISO-LATIN-15,它将很乐意将其转换为0xc383并将其转换为0xC3,然后将其转换为0xC2B1并将其转换为并将其转换为0xb1,为您提供一个正确的UTF-8字符串,其中包含正确的ñ。

特别是对于PHP和Web应用程序,请记住,默认情况下,许多计算机(以及将来越来越多的计算机)会向您发送UTF-8。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top