【问题标题】:Kivy (python-for-android) missing codecsKivy (python-for-android) 缺少编解码器
【发布时间】:2014-09-09 18:06:47
【问题描述】:

我刚刚遇到了缺少编解码器的问题,已经讨论过here,但是那里提供的解决方案修复了其他问题,导致原始问题无法显示。但是我现在遇到了同样的事情,这次没有解决方法。

我有 Windows-1250 编码的 HTML 页面。我正在使用htmlRequest = requests.get(url) 来获取它,我必须将编码明确指定为htmlRequest.encoding = 'windows-1250'。然后阅读htmlRequest.text 应该正确解码内容,它确实适用于 Win 和 Linux,但在 Android 上我只得到空格而不是特殊字符。

我想知道为什么,所以我尝试展示原始的htmlRequest.content,它有效,但在htmlRequest.content.decode('windows-1250')(与htmlRequest.text 相同)上,应用程序引发了一个异常:"LookupError: unknown encoding: windows-1250"。我也尝试了cp1250 这个名字,但是在再次为 Win 和 Linux 工作时,它并没有改变 Android 的情况。

因此,我认为这些编解码器确实丢失了,并寻求帮助来解决这个问题。我无法真正更改该页面的编码,如果我缺少正确的编解码器,我该如何正确解码?或者有没有其他方法可以做到这一点?

编辑: 正如 Ryan 所解释的,白名单应该会有所帮助,但我正在使用 Buildozer 构建 apk。它有什么选择吗(使用buildozer.spec 文件)?

【问题讨论】:

    标签: python unicode character-encoding kivy codec


    【解决方案1】:

    为了节省空间,额外的编解码器会从 python-for-android 构建中剥离(列入黑名单)。您可以通过将所需的编解码器列入白名单来解决此问题。创建一个文件(可能称为 whitelist.txt)或在现有白名单中添加以下行:

    encodings/cp1250.pyo
    

    然后使用--whitelist 参数将白名单文件提供给build.py


    对于 buildozer,您可以将其添加到 buildozer.spec 中的 android.p4a_whitelist 值中。

    【讨论】:

    • 问题是我正在使用 buildozer 构建(可能应该注意到这一点,但我不知道它们首先被剥离..),我会尝试看看是否有任何在 buildozer.spec 中指定编解码器白名单的选项,但我认为它需要弄乱代码。
    • 看起来android.p4a_whitelist 应该可以解决问题....但仅供参考,我不使用 buildozer,我直接使用 p4a。 :)
    • 太棒了!起初我错过了它,因为它被评论了。工作没有缺陷,尽管我必须先清理然后再次构建平台。您可能希望将此添加到您的答案中,以便更明显,但我将其标记为已回答,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2020-08-06
    相关资源
    最近更新 更多