字符编码问题 - 使用UTF-8 IE6 / ASP / XML从英镑符号(£)的奇怪行为

时间:2009-09-03 10:04:37

标签: utf-8 character-encoding ascii

我有一个非常奇怪的问题,网页上的磅标记显示不正确(或根本没有)。

我在文本框中键入文本,然后在新的IE(6)窗口中显示之前(简要地)将其存储在XML中。

最糟糕的是,这是不一致的。我发生了三件不同的事情:
1.磅符号甚至没有出现在源代码中(假设XML正在剥离它,因为它似乎默认使用UTF-8。)
2.磅符号出现在源文件中但不在网页上 3.磅符号出现在网页上的源和精细中(通常,如果发生这种情况,则第一次显示)。

现在,这只是一个更大问题的一个特定部分。我一直在寻找这个并做了一些研究,看来如果我有纯ASCII(ISO 8859-1 - Western Europe)并转换为UTF-8,它不知道符号是什么并完全删除它(在在这种情况下,我看到它被一个'?',一个盒子或者倒置'?'替换在其他地方。)

如果您将英镑符号输入为UTF-8并转换回ISO 8859-1,它会在英镑符号前获得一个大写A帽子(Â)。

我可以理解后者,至少在基本层面上 - 这是因为我们的系统必须保存(或存储在Oracle中)包含不同字符编码的井号,并且,因为我们没有指定字符编码(至少一般来说)对于我们的网页,有时IE会混淆并且无法正确显示内容。

我不明白的是上述不一致的结果。

我意识到我在最初的解释中有点模糊,但我希望写出我的简短解释可能有助于我自己的想法,并可能帮助其他人在将来理解类似的问题。

编辑:另外,我意识到我可以为HTML实体交换所有英镑符号(& pound;),但我觉得这很耗时且很混乱(如果它存储在Oracle中并稍后传递给PDF会怎么样? ,Excel等?)。

显然,任何指针和建议都会受到赞赏!

谢谢!

2 个答案:

答案 0 :(得分:2)

  

我在文本框中键入文本,其中   然后(简要地)存储在XML中   在新IE浏览器中显示之前(6)   窗口。

问题很可能嵌入此序列中。如果你能详细说明如何实现这个序列,那将会有所帮助。

此类问题的最常见原因是客户端实际编码字符的内容与服务器认为编码的内容之间的理解不匹配。最简单的解决方案是将accept-charset属性放在form元素上,这使得帖子的字符编码显式化。

stuff字段中发布的文字将以utf-8编码。

一些不一致的原因是: -

  1. 服务器可能会错误地对数据库中的字符进行编码,但是当将这些相同的字符发送到浏览器反向时,浏览器上的内容会再次显示正常。
  2. ISO-8859-1在不同的地方意味着不同的东西。 IE6在这个字符集方面有些松散,实际上会像Windows-1252一样对待。其他应用程序对ISO-8859-1进行了严格的解释。

答案 1 :(得分:0)

您说该网站并不总是说明正在使用哪种字符编码。在这种情况下,浏览器将不得不猜测。他们可能会在不同的页面上进行不同的猜测,这很可能是您看到不一致的原因。

许多字符编码是“ASCII加”(ASCII加上扩展的拉丁字符; ASCII加上希腊字母; ASCII加上西里尔字母;等等)。浏览器应该如何知道哪些是有意的?一种方法是通过查看代码点频率:“我看到了许多代码点[blah],这将是希腊语中的字符[?A],或西里尔字母中的字符[?B]。 A]在希腊语中并不常见,但[?B]在保加利亚语中很常见,所以这个页面很可能出现在西里尔字母中。“那种事。这意味着页面上稍微不同的文本,在代码点频率周围移动,可能导致浏览器完全不同地解释文本编码。这就是我们最近使用UTF-8的原因。这也是我们在HTTP标头和元标记中声明文本编码的原因。