4

Python の文字列が ASCII であるかどうかを確認したくありません。:)

HTTP 仕様には興味深い要件があり、それをどのように実装してテストできるのか疑問に思っていました。

受信者は、HTTP メッセージを、US-ASCII [USASCII] のスーパーセットであるエンコーディングの一連のオクテットとして解析する必要があります。

特定のエンコーディングに関係なく、HTTP メッセージを Unicode 文字のストリームとして解析すると、文字列処理ライブラリがオクテット 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のスーパーセットではありません。
4

1 に答える 1

3

それをテストする必要はありません。ASCIIのスーパーセットの%x0Aようにすべてを扱うだけです。ASCII のスーパーセットはバイトのすべての値を使用し、「奇妙な」文字はありません。LF%x7F

于 2013-03-11T21:55:15.173 に答える