使用Windows-1252而不是UTF-8有什么问题

时间:2014-01-31 21:15:54

标签: html5 oracle encoding utf-8 coldfusion

我有一个一直使用Windows-1252的测试站点。他们确实需要/使用一些符号,如平方根符号。而且他们不需要用英语以外的其他语言显示。最近我被要求将其切换为UTF-8,因为存在一些安全问题。在我将其更改为UTF-8之后,平方根和其他符号(从Oracle DB中拉出并通过ColdFusion)在生成的网页上显示正常。但是,如果我再次保存文档(发布到DB,页面刷新),符号将转换为奇怪的字符。如果我再次保存,会出现更多奇怪的角色。所以......

  1. 如果我不需要除英语以外的任何东西,坚持使用windows-1252有什么问题吗?任何安全/黑客问题?
  2. 如果您使用的话,是否存在使用UTF-8的含义 HTML5(因为这是HTML5的默认编码)?
  3. 如果建议我切换到UTF-8,我该如何获取当前版本 存储的平方根符号(和其他符号)可以工作吗?
  4. 我已经阅读了所有这些页面,仍然有点麻烦抓住这一切。希望有人来帮我澄清一下。谢谢!

    1. https://www.owasp.org/index.php/Canonicalization,_locale_and_Unicode
    2. 关于UTF-8如何产生的优秀描述,为什么它很棒,以及它解决的问题...... https://www.youtube.com/watch?v=MijmeoH9LT4
    3. http://www.w3.org/International/questions/qa-choosing-encodings“如果可以,请使用UTF-8”。 “事实上,HTML5规范草案目前说”鼓励作者使用UTF-8。一致性检查员可能会建议作者不要使用遗留编码。创作工具应该默认使用UTF-8来创建新文档。“”
    4. http://www.w3schools.com/tags/ref_charactersets.asp“对于HTML5,默认字符编码为UTF-8。”
    5. http://www.joelonsoftware.com/articles/Unicode.html
    6. * * *更新* * *

      到目前为止,我感谢所有帮助,使这更容易理解。 我将简化原来的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)?

3 个答案:

答案 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。你必须使用这些技巧之一:

  • HTML实体:&radic;&#8730;或类似的
  • 打印另一个角色change the font

在任何一种情况下,您的解决方案都不可移植:东西只能在正确配置的Web浏览器中正确显示。其他所有内容(数据库,JavaScript,文本文件,纯文本电子邮件......)都不包含真实数据。

此外,JSON唯一的编码是UTF-8。 JavaScript通常会为您进行转换,但您必须确保所有工具链的行为类似。

所以回答你的主要问题:如果你需要的话,使用Windows-1252时没有错误。问题是你已经需要更多的东西。

关于UTF-8的问题,很明显UTF-8是完整的Unicode编码,因此它确实满足了所有要求。 (无法使其正常工作可以将其转储,但这不是技术原因。)我的猜测是,由于您当前的数据没有实际的平方根符号,因此切换编码会破坏您使用的技巧。你需要:

  1. 找出当前的数据
  2. 运行一次性搜索并替换

答案 2 :(得分:0)

Web服务器编码是什么字符集?

尝试将网络服务器更改为utf8。在apache.config中:

 AddDefaultCharset utf-8