【问题标题】:Anything wrong with using windows-1252 instead of UTF-8使用 windows-1252 而不是 UTF-8 有什么问题
【发布时间】:2014-01-31 21:15:54
【问题描述】:

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

  1. 如果我不需要除英语以外的任何内容,那么坚持使用 windows-1252 有什么问题吗?有任何安全/黑客问题吗?
  2. 如果您使用的是不使用 UTF-8,是否有任何影响 HTML5(因为这是 HTML5 的默认编码)?
  3. 如果它建议我切换到 UTF-8,我如何获得当前 存储的平方根符号(和其他符号)可以工作吗?

我已经阅读了所有这些页面,但仍无法完全理解。希望有人在这里帮助我澄清。谢谢!

  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

* * * 更新 * * *

感谢您迄今为止为使这一点更容易理解所提供的所有帮助。 我将简化最初的 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)?。

【问题讨论】:

  • 有很多关于字符集和编码的 FUD 和错误信息。尽管某些编码(例如 UTF-7)存在安全问题,但 WIN-1252 不是其中之一。 w3schools 又错了,UTF-8 不是“HTML5 的默认编码”。 HTML5的默认编码不是一件简单的事情。

标签: html oracle encoding utf-8 coldfusion


【解决方案1】:

Windows 1252 是众多固定大小字符集之一。 Mac 有自己的一套。欧洲各地和世界其他一些地区都有一些 ISO。它们中的大多数都有细微的变化。

好处是你有一个固定大小的字符,这意味着 1 个字符 = 1 个字节,无论如何。

缺点是:

  • 有些人可能没有安装您的编码
  • 有些人可能使用稍微不同的编码,导致问题很少,不明显,但从长远来看非常难看
  • 您只能支持几种语言

这包括您想要引用的任何引用。在 windows-1252 中你不能显示俄语、希腊语、波兰语...

UTF-8 是 1+ 字节的 unicode 表示的标准编码。它可以代表您可能遇到的绝大多数字符,尽管它是为基于拉丁语的语言设计的,因为其他语言占用更多存储空间。

它用于 XML、JSON 和您可能找到的大多数类型的 Web 服务。当您不知道要使用什么编码时,这是一个很好的默认值。它允许限制编码问题的数量,例如“我虽然您使用的是 Latin-1 / 不,我使用的是 latin-9,但后来 Mac 上的这个人使用了 Roman”。如果您有超过 1 个人在处理网站的内容,他们的平台上可能有不同的编码,因此您的内容可能会在某些时候混乱。

据我所知,UTF-8 是唯一一种无需讨论即可轻松标准化人与人之间使用的编码的方法。

典型的例子是,如果你的网站是用 windows1252 编码的,而新开发者有一个 mac,你可能会遇到麻烦。

【讨论】:

  • "它用于 XML、JSON 和您可能找到的大多数类型的 Web 服务。"该客户站点来回发送许多 JSON 字符串,并且 windows-1252 没有问题。但是,是的,我想我理解不同的平台问题。我想弄清楚如何测试它。我可以使用 Mac。你能想出一些我可以提交给每个会产生不同结果的角色吗?
  • 天啊。您正在使用带有 windows-1252 的 json 吗?这是一个等待发生的阴险错误。看, json 指定它可以包含任何 Unicode 字符。其中大多数在 windows-1252 中没有映射。 (大多数重音字符,丹麦语,西班牙语可能......)
  • 另外,来自 json.org:The character encoding of JSON text is always Unicode. UTF-8 is the only encoding that makes sense on the wire, but UTF-16 and UTF-32 are also permitted.
  • 嗯,utf-8 的另一个论点。混合内容类型很容易出错。
  • 如果服务器端 jsonSafe() 函数正在删除 windows-1252 之外的字符,那么您没有混合类型。是的,JSON 应该是 utf 编码的——当您需要传输多字节字符时。此外,对于 ajax 请求,如果您 Chrome Inspcect Element 并查看网络选项卡,请求是 Content-type:application/x-www-form-urlencoded,它可以防止字符集的混合。回复将是Content-Type:text/xml; charset=WINDOWS-1252。
【解决方案2】:

您声称 Windows-1252 提供了您需要的一切,但 √ 符号是 counter-example。您必须使用以下技巧之一:

  • HTML 实体:√、√ 或类似
  • 打印另一个字符和change the font

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

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

所以回答您的主要问题:如果您只需要这些,那么使用 Windows-1252 并没有什么错误。问题是您需要的已经超出了它所能提供的范围。

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

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

【讨论】:

  • 之所以不转储它是因为转换许多庞大的 Oracle 数据库的艰巨任务。 docs.oracle.com/cd/E11882_01/server.112/e10729/…。在那之前,我只需要继续对某些字符进行编码。我有在函数中显示这些字符的技巧,所以如果有一天我们可以切换我的工作结束将是蛋糕。有人告诉我不使用 UTF-8 是一种安全风险(他们没有详细说明原因),这就是这个问题的开始。我还是不明白他们为什么会这么说。感谢您对这个问题的贡献。 +1
【解决方案3】:

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

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

 AddDefaultCharset utf-8

【讨论】:

  • 是的,我知道网络服务器在其中发挥了作用,甚至数据库也需要考虑它的字符集。我记得读过它们必须全部同步或相同的字符集?对吗?
  • 好吧,如果 Web 服务器发送回一个固定字节字符集,它将发送某些字符的 html 字符,而不是多字节等效字符。所以事情可能会一团糟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 2016-07-23
  • 2014-05-06
  • 2013-03-04
相关资源
最近更新 更多