我有简单的俄语HTML页面,里面有一些js。 除IE10外,每个浏览器都运行良好。即使是IE9也没关系。下一个代码包括在内:
<html lang="ru">
<meta http-equiv="Cоntent-Type" content="text/html"; charset="utf-8">
我还添加了.htacess
AddDefaultCharset UTF-8
仍然IE10以西里尔语编码加载页面(我相信cp-1251),以正确方式显示字符的唯一方法是在浏览器内手动将其更改为UTF-8(或选择自动检测模式)。
我不明白为什么IE10强制加载1251而不是UTF-8。
要检查的网站是http://btlabs.ru
答案 0 :(得分:4)
真正导致问题的是服务器发送的HTTP标头包含
Content-Type: text/html; charset=windows-1251
这会覆盖所有meta
标记。您当然应该使用其他答案中指出的meta
标记来修复错误,并运行标记验证程序来检查您的代码,但要修复实际问题,您需要修复.htaccess
文件。在没有看到文件和其他服务器端问题的情况下,无法告诉如何解决这个问题(例如,服务器设置可能会阻止每个目录.htaccess
文件的影响并应用服务器管理员设置的一个全局文件)。请注意,文件名必须有两个c,而不是一个(.htaccess
,而不是`.htacess')。
您可以查看哪些标头是例如使用Rex Swain的HTTP Viewer。
其他浏览器的工作原理是它们应用现代HTML5原则“BOM赢得所有”。也就是说,HTTP标头在指定字符编码时赢得meta
标签,但如果实际数据以构成UTF-8编码形式的字节顺序标记(BOM)的三个字节开头,则无论如何什么,数据将被解释为UTF-8编码。由于某些未知原因,IE 10不会这样做(IE 11也不会这样做)。
但如果您只是让服务器发送一个声明UTF-8的HTTP标头,那么这不会有问题。
如果服务器已设置为声明windows-1251而您无法更改,那么您只需要使用它。然后将HTML文件转码为windows-1251,并在meta
标记中声明windows-1251。这意味着如果你需要在windows-1251中可以表示的有限曲目之外的任何字符,你需要使用字符引用来表示它们。
答案 1 :(得分:1)
也许您忘了将cоntent=text/html;
更改为cоntent="text/html";
正如Shawn已经指出的那样,它也可能是content="text/html; charset=utf-8"
。
但是你已经尝试了两件事,你能否确认IE10输出是否像this?
我无法真正帮助进一步解决这个问题,因为我这里唯一拥有的是IE 10在线模拟器。
到目前为止,可能存在的问题是:
o
character <meta>
tag is still outside of <head>
,将其放置到位答案 2 :(得分:1)
也许是因为'内容'中的'o'不是ascii'o'。注意它在Stackoverflow中不是红色的?然后我把它复制到一个好的文本编辑器,看到它确实不是一个o。因为'o'实际上不是ascii'o',所以在每个Web浏览器中都应该忽略整行,这应该取决于它使用的默认字符集。微软和IE因挑选错误的默认值而臭名昭着,因此我无法在IE中运行。 ;)
但编码也有很好的建议。最好在属性值周围加上引号。但这不应该打破网络浏览器。
你应该在开头使用doctype:
<!DOCTYPE html>
<html lang='ru'>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
但真正的罪魁祸首是你的内容和字符集问题。注意我的路线。我的是非常不同的。 ;) 那就是问题所在。请注意,我的两个 ascii'o,一个在“Content-Type”中,另一个在'content ='。
答案 3 :(得分:1)
正如Shawn指出的那样,复制并粘贴它:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
这是一个非常好的例子,说明看起来像英文Ascii字母的非Ascii字母可以真正搞砸了!