python – 具有不属于任何ascii超集的字符的消息的可测试性(例如:JIS X 0208)?

我不想检查
Python中的字符串是否是ASCII格式. 🙂

HTTP Specification中有一个有趣的要求,我想知道它是如何实现和测试的.

Recipients MUST parse an HTTP message as a sequence of octets in an encoding that is a superset of US-ASCII [USASCII].

Parsing an HTTP message as a stream of Unicode characters, without regard for the specific encoding, creates security vulnerabilities due to the varying ways that string processing libraries handle invalid multibyte character sequences that contain the octet LF (%x0A).

在另一个stackoverflow answer中,有一个字符集的例子,它不是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的超集.

最佳答案 你不必测试它,你只需要像它是ASCII的超集一样对待它,例如始终将%x0A视为LF,假设%x7F以下的字符为ASCII,并且不尝试解析多字节序列. ASCII的超集使用一个字节的每个值,没有“奇怪”的字符.

点赞