【问题标题】:Check if bytes result in valid ISO 8859-15 (Latin) in Python检查字节是否在 Python 中生成有效的 ISO 8859-15(拉丁文)
【发布时间】:2023-04-07 07:03:01
【问题描述】:

我想测试我从文件中提取的一串字节是否产生有效的ISO-8859-15 编码文本。
我遇到的第一件事是关于 UTF-8 验证的类似案例:

https://stackoverflow.com/a/5259160/1209004

因此,基于此,我认为我为 ISO-8859-15 做类似的事情是很聪明的。请看以下演示代码:

#! /usr/bin/env python
#

def isValidISO885915(bytes):
    # Test if bytes result in valid ISO-8859-15
    try:
        bytes.decode('iso-8859-15', 'strict')
        return(True)
    except UnicodeDecodeError:
        return(False)

def main():
    # Test bytes (byte x95 is not defined in ISO-8859-15!)
    bytes = b'\x4A\x70\x79\x6C\x79\x7A\x65\x72\x20\x64\x95\x6D\x6F\xFF'

    isValidLatin = isValidISO885915(bytes)
    print(isValidLatin)

main()

但是,运行它会返回 True,即使 x95 不是 ISO-8859-15 中的有效代码点!我在这里忽略了一些非常明显的东西吗? (顺便说一句,我在 Python 2.7.4 和 3.3 上尝试过,两种情况下的结果都是相同的)。

【问题讨论】:

    标签:
    character-encoding