我有许多正在呈现无效字符网站。该网页的meta标签中指定UTF-8编码。然而,一些网页包含无法通过UTF-8解释的字符,可能是因为文件被保存与其他编码(如ANSI)。特别是一个我很担心,现在是一个奇特的撇号(如“鲍勃” ......抱歉,如果不正确显示)。 W3的验证表明实体是“ \ X92 ”,但它不会验证文件,因为它不映射到Unicode。而且,当然,如果我打开在记事本++文件并改变编码为UTF-8,字符由92在一个黑盒子替换。

下面是我的问题:什么是解决这个问题的最简单的方法?我必须打开所有的网页,并与传统的撇号替换字符?或者是有一个快速解决我可以添加(比如,以IIS)可能覆盖或修复编码问题?还是我来蛮力查找/替换?我有数以百计的这些网站上的网页,我不知道我有多少人必须改变,因此,如果有人知道这样我既可以规避这个问题,或者迅速解决它,我将不胜感激。

有帮助吗?

解决方案

您服务的页面作为直接的HTML,或者你有服务内容的另一个脚本?如果您有提供的内容的脚本,该脚本可以只寻找\ X92的任何实例,并用省略号代替它。在PHP这将是一个简单的str_replace函数()

如果你在提供直接的HTML,那么你就必须真正改变自己的文件。这取决于你在什么样的工具,你必须提供给您,什么操作系统不过是自动化的,(也许应该是,如果你有数百个文件)。既然你说你正在使用记事本+ +我想这是安全的假设你在微软Windows(因此没有什么好玩的Unix命令来加快速度吧)

它可能然而创建一个批处理脚本可以做到这一点。有内置到命令提示符非常简单的ASCII文本编辑工具。如果这是不可能的,那么它很可能使一个C或C ++程序要做到这一点,如果你有你的系统和C的适度知识在编译器如果你有前者,而不是后者,问我会掀起一些源为您服务。

其他提示

我不知道关于它自己的编码部分,但如果你风有蛮力去做,你总是可以写一个小程序,通过您的所有网页的迭代,负载的每一个文件到内存,运行regex.replace来解决这个问题的性格,将文件保存回磁盘。显然不理想,但比你自己打开每个文件更好。

好运

我只是碰到了类似的问题,其中一些不打破空间“XA0”陷入了所谓UTF-8的文件。在记事本++这些都显示在与写在上面“XA0”黑盒子。然而记事本+ +不允许他们复制或粘贴。

我做了一些研究,发现了是怎么回事。十六进制编辑器显示,这些被编码为单个字节:“A0”,它是无效的UTF-8。任何不ASCII应至少两个字节,所以适当的编码是“C2 A0”十六进制的。

有关你看中的撇号例如,你正在处理同样的事情。事实上,虽然,你的问题是比较复杂的,因为在扩展ASCII字符\ X92(十进制146)是一个单引号,但在Unicode中\ X92是控制字符和右单引号应该是U + 2019(十进制8217)。在记事本++添加该符号(通过编辑 - >字符面板),并以十六进制编辑器检查揭示了适当的十六进制编码是“E2 80 99”,这在二进制是1110的 0010 10的 000000 10的 011001 即可。当卸下UTF-8控制字节(非粗体)该产率0010 0000 0000 0001 1001等于8217的十进制值。

的处理,这将是打开文件作为字节流(无符号字符*在c)和搜索不当UTF-8序列正确的方法。然后,你可以使用(见 https://en.wikipedia.org/wiki替换它们/ UTF-8#Invalid_byte_sequences ),或者你可以尝试定制处理它们,通过使置换像A0 - > C2 A0(不正确的编码不换行空格)和92 - > 80 E2 99(不正确的编码右单引号)。

所有特殊charcters应该是HTML编码,例如一版权符号应该在你的HTML作为

©

HTML实体列表:

http://www.w3schools.com/HTML/html_entities.asp

至于如何实现这在很大程度上取决于你如何创建摆在首位的代码,但像ASP.Net将有服务器端功能,如:

Server.HTMLEncode("string with special chars")
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top