代码之家  ›  专栏  ›  技术社区  ›  Mihai Damian

用python解析.strings文件

  •  1
  • Mihai Damian  · 技术社区  · 15 年前

    我正在尝试编写一个小的python脚本来解析我的iPhone应用程序项目中的.strings文件,并确定哪些键可能不在使用中。我也在做一些字符串匹配来过滤掉一些结果。这就是我的问题开始的地方:)。如果我尝试像

    for file_line in strings_file:    
        if 'search_keyword' in file_line:
            ...
    

    搜索关键字经常不匹配,即使我把每个文件行打印在同一个文件中,因为我似乎正确地阅读了文本,我的搜索关键字出现了。

    问题是这些字符串文件是某种二进制格式。有人知道正确的方法来解析这些文件吗?

    3 回复  |  直到 15 年前
        1
  •  2
  •   jfs    15 年前

    使用正确的编码打开 .strings -在您的 source code . 根据 documentation 文件的编码可以是UTF-16。

    # -*- coding: utf-8 -*-
    import codecs
    
    for line in codecs.open(u'your_file.strings', encoding='utf-16'):
        if u'keyword' in line:
           # process line
    
        2
  •  2
  •   balpha    15 年前

    没有这些经验 .strings 文件,但以下是找不到匹配项的原因:

    strings_file.read()
    

    返回A 一串 文件的完整内容。迭代字符串迭代 单个字符 ,即在你的 for 循环, file_line 不是一行,而是一个字符(长度为1的字符串),显然不能包含多字符搜索词。

        3
  •  0
  •   TechZen    15 年前

    听起来好像Stings文件被保存为数据。如果Python不能按原样读取它,那么可以在Objective-C中将其转换为纯文本文件。

    只需:(1)将字符串文件读取到具有正确编码的文件中。(2)转换为字典(3)将字典写入另一个文件。

    所以:

    NSString *strings=[NSString stringWithContentsOfFile:filePath encoding:NSUTF16StringEncoding error:&error];
    NSDictionary *dict=[strings propertyList];
    [dict writeToFile:anotherFilePath atomically:NO];