4

我不想检查 Python 中的字符串是否为 ASCII。:)

HTTP 规范中有一个有趣的要求,我想知道如何实现和测试它。

接收者必须将 HTTP 消息解析为编码为 US-ASCII [USASCII] 超集的八位字节序列。

由于字符串处理库处理包含八位字节 LF (%x0A) 的无效多字节字符序列的方式不同,将 HTTP 消息解析为 Unicode 字符流而不考虑特定编码会产生安全漏洞。

在另一个stackoverflow 答案中,有一个字符集示例,它不是 US-ASCII 的超集。但我对测试该要求更感兴趣。或一种测试。这个要求只是意味着解析器必须选择一个 ASCII 的超集来吞下数据,但我想知道你是否想在之前检查消息中是否有任何奇怪的字符。

让我们说一个消息MSG

def is_ascii_superset(self, MSG):
    "take any string, and return True or False"
    # Test here
    if test(MSG):
        return True
    else:
        return False

如果有所有作为 ASCII 超集的字符集的列表,有什么想法吗?

更新

人们似乎误解了这个问题。我不是在谈论查找字符串是否是 ASCII 的一部分。这是微不足道的。

  • ISO-8859-1、UTF-8 等是ASCII的超集。
  • JIS X 0208不是ASCII 的超集。
4

1 回答 1

3

您不必对其进行测试,您只需将所有内容都视为 ASCII 的超集,例如始终%x0A视为LF,假设下面的字符%x7F是 ASCII,并且不要尝试解析多字节序列。ASCII 的超集使用一个字节的每个值,没有“奇怪”的字符。

于 2013-03-11T21:55:15.173 回答