我有一个测试站点和测试数据库都设置为windows-1252
。当我在Chrome中输入Alt + 234时,会将其放在字段Ω
中。当我提交表单时,将其发布并存储为Ω
,我假设这是浏览器在说“嘿,这不在指定的字符集中,但我确实知道html等效项,因此我将其发布了” 。美好的。保存后,该符号会正确显示,我可以保存,保存,保存,并且它总是可以正常显示。但是,如果我使用Alt + 230尝试相同的操作,浏览器将不会提交µ
的html实体值。而是在Chrome DevTool窗口中查看POST时看到“(无法解码值)”。最终将其作为问号存储在数据库中。
为什么对Alt + 234(Ω
)和Alt + 230(µ
)的对待有所不同?
我知道我应该切换到UTF8,但我仍然想知道为什么它会以这种方式运行。谢谢!
最佳答案
U + 03A9 Ω
希腊大写字母omega不属于Windows code page 1252。
U + 00B5 µ
微符号(与希腊亩的字符不完全相同)是1252(字节181)的一部分。
Alt +键盘快捷键编号与代码页1252或当前的ANSI代码页通常不匹配,因此能够从该快捷方式键入字符并不表示这些代码页的成员身份。相反,它们来自DOS code page 437。
是的,这是HTML5最终实现的一种长期的,不可恢复的怪异 Action ,用于当页面请求的编码中的字符不可编码时。
浏览器将把该字符作为代码页1252字节181发送。devtools和您的应用程序不希望处理代码页1252字节……可能他们希望使用UTF-8。由于字节181本身不是有效的UTF-8序列,因此无法保留它。