【问题标题】:Can UTF8 encoded data missread as Latin-1 produce ASCII artifacts?UTF8 编码数据误读为 Latin-1 会产生 ASCII 伪影吗?
【发布时间】:2011-05-06 00:13:35
【问题描述】:

UTF-8 单字节字符完美映射到 Latin-1 (ISO 8859-1) 字符(字符代码 128 以下的字符);基本上是默认的 ASCII 字符。 如果我有一个 UTF-8 编码的字符串并将其传递给一个函数,该函数需要一个 Latin-1 字符串,Latin-1 函数是否有可能将 UTF-8 多字节字符的一部分误解为 ASCII 字符?

我想像这样的事情可能发生:

(imagniray) UTF-8 多字节字符:0xA330
(错误)被 Latin-1 解释为两个 Latin-1 字符:0xA30x30

第一个字符不在 ASCII 集中,但第二个是 0 字符的 ASCII 码。多字节 UTF-8 字符是否有可能产生一个看起来像上面示例中的单字节 UTF-8 / ASCII 字符的工件?

根据我对 UTF-8 的理解,只有单字节字符包含未设置最高有效位的任何字节,因此基本上多字节字符不会包含可能被 Latin-1 函数误解为有效 ASCII 字符的字节(因为所有这些字符的最高有效位都未设置)。但我想确保这是真的,我不会搞砸这一点,因为这在处理数据清理时可能会产生安全隐患——我显然目前正在这样做。

【问题讨论】:

  • 你自己回答了这个问题,我认为你的推理是正确的,假设它是一个有效的 UTF8 字符串。显然,用户/黑客可能会在您的示例中输入无效字符串,例如 0xA330。
  • 我当然知道这一点。我的问题更多是我必须使用一个需要 Latin-1 的函数,并且首先将我的 UTF-8 字符串转换为 Latin-1 表示,但是由于 UTF-8 如何将单个字符与多字节字符分开并且因为有效字符串的字符都位于 ASCII 页面内,实际上无需执行该转换步骤,而不必担心从无效的 UTF-8 字符串中出现“有效”伪影。

标签: utf-8 character-encoding sanitization


【解决方案1】:

您的理解是正确的,只有单字节字符包含未设置最高有效位的任何字节。有一个很好的表格显示在:http://en.wikipedia.org/wiki/UTF-8#Description

【讨论】:

  • 因此,多字节字符中的单个字节不可能被误解为 ASCII 字符,因为它们的值都至少为 128?
  • 这是我的理解,是的。当 UTF-8 多字节字符被误解为 Latin-1 时,就会出现一堆重音字符。
  • 它不能被误解为 ASCII 字符,但可能会被误解为 ISO 8859-1 字符。如果您的清理工作假设它正在处理 ISO 8859-1 输入并尝试执行诸如带变音符号 (å -> a) 之类的操作,而不是丢弃任何非 ASCII 输入,那么事情可能会变得很奇怪。
猜你喜欢
  • 2013-06-11
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 2014-03-05
  • 2020-06-15
  • 1970-01-01
相关资源
最近更新 更多