在python中打印非ascii文本

时间:2018-10-22 10:39:15

标签: python-2.7 utf-8

我正在使用python2,我想将非utf-8文本转换为可读的字符串。我正在尝试使用latin-1和utf-8进行解码。但是我没有成功。

这是字符串

s =  ' ¤¿à¤²à¤¾ मेंदान रोड़ इंदौर'

我尝试过:

s.decode('utf-8')

我得到以下输出:

u' \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xbf\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xb2\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xbe \xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xae\xc3\u0192\xc2 \xc3\u201a\xc2\xa5\xc3\xa2\xc2\u20ac\xc2\xa1\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\xa2\xc2\u20ac\xc2\u0161\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xa6\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xbe\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xa8 \xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xb0\xc3\u0192\xc2 \xc3\u201a\xc2\xa5\xc3\xa2\xc2\u20ac\xc2\xb9\xc3\u0192\xc2 \xc3\u201a\xc2\xa5\xc3\u2026\xc2\u201c \xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\xa2\xc2\u20ac\xc2\xa1\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\xa2\xc2\u20ac\xc2\u0161\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xa6\xc3\u0192\xc2 \xc3\u201a\xc2\xa5\xc3\u2026\xc2\u2019\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xb0'

上面的输出仍然不可读。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

第一件事:您必须read this,没有任何借口

完成后,您将了解,尝试在不知道原始编码的情况下将字节字符串解码为unicode通常会浪费时间。

第二点:此(为便于阅读而缩短):

sealed class Platform {

    abstract val name : String

    sealed class Local : Platform() {

        object Default : Local() {
            override val name: String = "android"
        }

        object Amazon : Local() {
            override val name: String = "android-amazon"
        }
    }

    object Missing : Platform() {
        override val name: String = "missing"
    }

    data class Remote(override val name: String) : Platform()

    companion object {
        @JvmName("from")
        @JvmStatic
        operator fun invoke(name: String?): Platform = when (name) {
            Local.Default.name -> Local.Default
            Local.Amazon.name -> Local.Amazon
            Missing.name -> Missing
            null -> Missing
            else -> Remote(name)
        }

        @JvmField
        val LOCAL : Platform = if (BuildConfig.amazon) Local.Amazon else Local.Generic

        @JvmField
        val MISSING : Platform = Missing
    }
}

是python Unicode字符串的内部表示形式-通过显示字节字符串的内部表示形式,您将得到类似的结果:

@AutoValue
public abstract class Session implements Serializable {

    public static final Session NONE_FOUND = from(0, new DateTime(0), Platform.MISSING);

    public static Session from(String id, @Nullable Platform lastPlatform) {
        Platform platform = lastPlatform == null ? Platform.MISSING : lastPlatform;
        return new AutoValue_Session(id, platform);
    }

    public static Session from(RemoteSession remote) {
        return from(
                remote.id(),
                remote.lastPlatform()
        );
    }

    public abstract String id();

    public abstract Platform lastPlatform();

}

因此,您唯一的问题是将内部表示与“人类可见”的输出相混淆

现在请注意,最终如何将字符串显示给用户取决于进行渲染的软件(如果从命令行运行python并打印到stdout,则您的xterm或等效项;如果将其作为服务器的一部分进行渲染,则您的浏览器会-端生成的HTTP响应等)和系统设置,所有这些都不在Python的职责范围内。