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

3
我在网页上遇到了一个非常奇怪的问题,英镑符号显示不正确(或者根本不显示)。我在文本框中输入文本,然后将其(简要地)存储在 XML 中,最后在新的 IE(6)窗口中显示。最糟糕的是这种情况并不一致。有三种不同的情况:
1. 英镑符号甚至不出现在源代码中(假设 XML 默认使用 UTF-8,因此它会将其剥离)。
2. 英镑符号在源代码中出现但在网页上没有显示。
3. 英镑符号在源代码和网页上都正常显示(通常情况下,如果发生这种情况,这是第一次显示时发生的)。
现在,这只是更大问题的一部分。我一般地研究了一下,并进行了一些调查,发现如果我有纯 ASCII(ISO 8859-1 - Western Europe)并转换为 UTF-8,则它完全不知道该符号是什么,并将其完全删除(在这种情况下,我已经看到它被替换为“?”、“方块”或其他地方的倒置“?”)。
如果您将井号作为UTF-8输入并转换回ISO 8859-1,则在井号之前会得到一个大写A帽子(Â)。
至少我可以基本理解后者——这是因为我们的系统必须在不同的字符编码中保存(或存储在Oracle中)英镑符号,而且由于我们通常不为网页指定字符编码,因此有时IE会混淆并显示不正确的内容。
但我不明白上面概述的不一致结果。
我意识到我的初始解释有点含糊不清,但我希望写出我的简要解释能够帮助自己整理思路,并可能帮助其他人理解类似的问题。
编辑:此外,我意识到我可以用HTML实体(£)替换所有英镑符号,但我觉得这很耗时且凌乱(如果它存储在Oracle中并稍后传递给PDF、Excel等呢?)。
当然,任何指针和建议都将不胜感激!
谢谢!

谢谢Anthony:Windows 2003服务器 - FrostbiteXIII
2个回答

2
我正在一个文本框中输入文本,然后将其短暂地存储在XML中,然后显示在新的IE(6)窗口中。最有可能存在问题的就是这个序列。如果您能详细说明如何完成此序列,那么会很有帮助。
这种问题最常见的原因是客户端实际编码字符与服务器认为的编码方式之间的不匹配。解决此问题的最简单方法是在“表单”元素上放置“accept-charset”属性,从而明确发布的字符编码。
在“stuff”字段中发布的文本将以utf-8编码。
一些不一致的原因是:
1.服务器可能会错误地对数据库中的字符进行编码,但当将这些相同的字符发送到浏览器时,它们会反转损坏的部分,从而在浏览器上看起来很好。 2.ISO-8859-1在不同的地方意义不同。IE6对该字符集比较宽松,实际上会将其视为Windows-1252。其他应用程序则对ISO-8859-1进行更严格的解释。

谢谢Anthony,我一直被拉到与此无关的不同问题上。实际上,我可能不得不停止研究这个问题,并且只需搜索并替换英镑符号为html实体(£),即使我真的不想...如果有进一步的消息,我会更新帖子,感谢你详细的回复(我不能“喜欢”您的回复,因为我的声望值还没有达到15,所以我一旦达到那个级别就会...)。 - FrostbiteXIII
@FrostbiteXIII,这里有10个给你;)。 - AnthonyWJones
谢谢! :) - FrostbiteXIII
再次感谢您的回答 - 我认为很多事情都出了问题,所以我将所有能够设置为UTF-8的内容都进行了设置(包括您建议的)。虽然仍有一些问题存在,但是有些问题已经解决了,我认为这已经是最好的结果了。 - FrostbiteXIII

0

你说网站并不总是说明使用哪种字符编码。在这种情况下,浏览器只能猜测。而且他们可能在不同的页面上猜测不同,这很可能是你看到不一致性的原因。

许多字符编码是“ASCII Plus”(ASCII加扩展拉丁字符;ASCII加希腊字母;ASCII加西里尔字母等)。浏览器应该如何知道意图是什么?一种方法是通过查看代码点频率: “我看到了很多 [blah] 代码点,它将是希腊语中的字符 [?A] 或者是西里尔语中的字符 [?B]。字符 [?A] 在希腊语中并不常见,但 [?B] 在保加利亚语中相当频繁,所以这个页面很可能是用西里尔字母写的。” 就是这种情况。这意味着页面上略有不同的文本,会导致浏览器完全不同的解释文本编码。这就是为什么我们现在使用 UTF-8 的原因。这也是为什么我们在HTTP头和元标记中声明文本编码的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接