Skip to main content
 首页 » 编程设计

Python 字符串编码和 ==

2025年05月04日13tintown

当我认为 python 中的字符串不是 == 时,我遇到了一些麻烦,我相信这与它们的编码方式有关。基本上,我解析了一些存储在 zip 存档中的逗号分隔值(特别是 GTFS 提要,对于那些好奇的人)。

我在 python 中使用 ZipFile 模块打开 zip 存档中的某些文件,然后将那里的文本与一些已知值进行比较。这是一个示例文件:

agency_id,agency_name,agency_url,agency_phone,agency_timezone,agency_lang 
ARLC,Arlington Transit,http://www.arlingtontransit.com,703-228-7433,America/New_York,en 

我正在使用的代码试图识别文本第一行中字符串“agency_id”的位置,以便我可以在任何后续行中使用相应的值。这是代码片段:

zipped_feed = ZipFile(feed_name, "r") 
agency_file = zipped_feed.open("agency.txt", "r") 
 
line_num = 0 
agencyline = agency_file.readline() 
while agencyline: 
    if line_num == 0: 
        # this is the header, all we care about is the agency_id 
        lineparts = agencyline.split(",") 
        position = -1 
        counter = 0 
        for part in lineparts: 
            part = part.strip() 
            if part == "agency_id": 
                position = counter               
        counter += 1 
        line_num += 1 
        agencyline = agency_file.readline() 
    else: 
        ..... 

此代码适用于某些 zip 存档,但不适用于其他。我做了一些研究并尝试打印 repr(part),我得到的是 '\xef\xbb\xbfagency_id' 而不是 'agency_id'。有谁知道这里发生了什么以及我该如何解决?感谢所有的帮助!

请您参考如下方法:

那是一个Byte Order Mark ,它告诉文件的编码,在 UTF-16 和 UTF-32 的情况下,它还告诉文件的字节顺序。您可以解释它或检查它并将其从字符串中删除。 要删除它,您可以这样做:

import codecs 
 
unicode(part, "utf8").lstrip(codecs.BOM_UTF8.decode("utf8", "strict"))