我有一个一直使用Windows-1252的测试站点。他们确实需要/使用一些符号,如平方根符号。而且他们不需要用英语以外的其他语言显示。最近我被要求将其切换为UTF-8,因为存在一些安全问题。在我将其更改为UTF-8之后,平方根和其他符号(从Oracle DB中拉出并通过ColdFusion)在生成的网页上显示正常。但是,如果我再次保存文档(发布到DB,页面刷新),符号将转换为奇怪的字符。如果我再次保存,会出现更多奇怪的角色。所以......
我已经阅读了所有这些页面,仍然有点麻烦抓住这一切。希望有人来帮我澄清一下。谢谢!
* * *更新* * *
到目前为止,我感谢所有帮助,使这更容易理解。 我将简化原来的3个问题,希望能够达成明确的答案,所以这里是:客户不需要支持其他语言,他们将使用一些HTML5标签和TON通过jQuery.ajax()来回发送的JSON / XML流量。鉴于这些信息,从安全角度来看,将数据库设置为NLS_CHARACTERSET: WE8MSWIN1252
并将网页设置为<CFHEADER NAME="Content-Type" value="text/html; charset=windows-1252">
是否有任何问题?谢谢。
这是另一个与此问题略有分歧的问题:Why am I able to use a character that's not part of a charset (windows-1252)?。
答案 0 :(得分:3)
Windows 1252是许多固定大小的字符集之一。 Mac有它自己的一套。欧洲各地以及世界其他地区都有一些ISO。他们中的大多数都有轻微的变化。
好处是你有一个固定大小的字符,意思是1个字符= 1个字节,无论如何。
不好之处在于:
包括您想要的任何引用。在windows-1252中你无法显示俄语,希腊语,波兰语......
UTF-8是1+字节上unicode表示的标准编码。它可以代表您可能遇到的绝大多数字符,虽然它是为基于拉丁语的语言设计的,因为其他语言需要更多的存储空间。
它用于XML,JSON以及您可能找到的大多数类型的Web服务。当您不知道要使用哪种编码时,它是一个很好的默认值。它允许限制编码问题的数量,例如“我虽然你是拉丁语-1 /否,我使用的是latin-9,但后来这个人使用了罗马”。如果您有超过1人在处理网站内容,他们的平台上可能会有不同的编码,因此您的内容可能会在某些时候搞砸。
据我所知,UTF-8是在没有讨论的情况下轻松标准化人们之间使用的编码的唯一方法。
典型的例子是,如果您的网站是在windows1252中编码的,并且新的开发人员有一台Mac,那么您可能会遇到麻烦。
答案 1 :(得分:1)
您声称Windows-1252提供了您需要的所有内容,但√符号为counter-example。你必须使用这些技巧之一:
√
,√
或类似的在任何一种情况下,您的解决方案都不可移植:东西只能在正确配置的Web浏览器中正确显示。其他所有内容(数据库,JavaScript,文本文件,纯文本电子邮件......)都不包含真实数据。
此外,JSON唯一的编码是UTF-8。 JavaScript通常会为您进行转换,但您必须确保所有工具链的行为类似。
所以回答你的主要问题:如果你需要的话,使用Windows-1252时没有错误。问题是你已经需要更多的东西。
关于UTF-8的问题,很明显UTF-8是完整的Unicode编码,因此它确实满足了所有要求。 (无法使其正常工作可以将其转储,但这不是技术原因。)我的猜测是,由于您当前的数据没有实际的平方根符号,因此切换编码会破坏您使用的技巧。你需要:
答案 2 :(得分:0)
Web服务器编码是什么字符集?
尝试将网络服务器更改为utf8。在apache.config中:
AddDefaultCharset utf-8