我的测试网站和测试数据库都设置为windows-1252
。当我在Chrome中键入 Alt + 234 时,会将此符号放在字段Ω
中。当我提交表单时,它会将其发布并存储为Ω
我假设这是浏览器说" 嘿,这不是在指定的字符集中但我做的知道一个html等价物,所以我会发布"。精细。保存后符号显示正常,我可以保存,保存,保存,它总是显示正常。但是如果我用 Alt + 230 尝试同样的事情,浏览器就不会提交它的html实体值µ
。相反,我看到"(无法解码价值)"在Chrome DevTool窗口中查看POST时。它最终作为问号存储在数据库中。
为什么它以 Alt + 230 的方式处理 Alt + 234 (Ω
) (µ
)?
我知道我应该切换到UTF8,但我仍然想知道它为什么会这样运作。谢谢!
答案 0 :(得分:0)
U + 03A9 Ω
希腊大写字母欧米茄不属于Windows code page 1252。
U + 00B5 µ
微符号(与希腊语mu不完全相同)是1252(字节181)的一部分。
Alt +键盘快捷键号码与代码页1252或一般的当前ANSI代码页不对齐,因此能够从该快捷方式键入字符并不意味着这些代码页的成员身份。相反,它们来自DOS code page 437。
当我提交表单时,它发布并将其存储为Ω我假设这是浏览器说“嘿,这不是在指定的字符集中,但我知道一个html等价物,所以我会发布相反“
是的,这是一个长期存在的奇怪的不可恢复的错误,HTML5最终标准化,因为当一个字符在页面请求的编码中不可编码时。
相反,我在Chrome DevTool窗口中查看POST时看到“(无法解码值)”。它最终作为问号存储在数据库中。
浏览器将该字符作为代码页1252字节181发送。无论你的应用程序是什么,并不期望处理代码页1252字节...可能他们期望UTF-8。因为字节181本身不是有效的UTF-8序列,所以它们无法保留它。
答案 1 :(得分:0)
对发送的变量使用encodeURIcomponent
可以解决此问题。
损坏:
`?value=${myValue}`
工作:
`?value=${encodeURIcomponent(myValue)}`