为什么我能够使用不属于字符集的字符(windows-1252)?

时间:2014-02-01 17:37:41

标签: oracle encoding coldfusion character-encoding windows-1252

我正在寻找一些帮助来理解字符集是如何工作的。这个问题是Anything wrong with using windows-1252 instead of UTF-8

的延续

我有一个测试ColdFusion网站使用...

<CFHEADER NAME="Content-Type" value="text/html; charset=windows-1252">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />

和测试Oracle DB使用...

NLS_CHARACTERSET: WE8MSWIN1252
NLS_NCHAR_CHARACTERSET: AL16UTF16

根据windows-1252字符集,没有平方根符号(alt + 251):√但我可以在网页表单中输入该字段,将其保存到数据库,查询并在屏幕上显示再好吧。当它在数据库中时,它存储为:&#8730;。如果它甚至不是charset的一部分,我如何输入,存储,查询和显示它?根据字符集,十进制251是这样的:Hex:FB | û | 00FB | LATIN SMALL LETTER U WITH CIRCUMFLEX

1 个答案:

答案 0 :(得分:3)

你并没有真正使用页面外的字符和数据库的字符集。

由于页面是windows-1252编码,如果您在表单字段中输入Alt + 251然后发布数据,浏览器会说:

"Hey this char is not apart of windows-1252 and I need to only send back data
 which is in windows-1252, so I will do the best I can and send back the 
 html character code of char &#8730;  -- oh well, I wish I could send back
 1 character, since I cannot I will send back 7."

如果你注意到,这是7个不同的字符,它们在windows-1252字符集中。

如果页面使用多字节字符集进行编码,浏览器会发回一些被认为是1个字符的内容。

那你怎么查询呢?

 select * from tab where field like '%&#8730;%'

你所拥有的是方根符号的html字符:https://www.google.com/#q=html+character+codes

更新

这是一篇非常好的文章,解释了发生的事情:http://htmlpurifier.org/docs/enduser-utf8.html

 "...once you start adding characters outside of your encoding... 
 [the browser might] replace the character with a character entity reference...."

当你在Windows机器上输入Alt + 251时,它会插入平方根符号,在Unicode中它是U-221A。

按Alt + 251就像键盘宏一样插入Unicode,它是U-221A。