【问题标题】:Typing utf-8 characters in python in interactive mode on OS-X在 OS-X 上以交互模式在 python 中键入 utf-8 字符
【发布时间】:2012-04-09 18:07:28
【问题描述】:

我正在尝试在交互模式下将一些西班牙语字符输入到字符串中。例如,option+e e 产生“é”,这样我就可以做出类似string="él" 的声明。这在终端中有效,但在 python(我安装的任何版本,我有几个)中却没有。它根本不产生任何东西。这包括尝试粘贴字符。这正是this question 中描述的问题,特别是关于粘贴的部分以及他对亚历克斯问题的评论,他指出亚历克斯的回答没有解决关于 utf-8 字符的复制/粘贴失败的问题.我该怎么做?

【问题讨论】:

  • “Python 解释器”到底是什么意思?我通过终端访问 Python shell - 你是怎么做到的?
  • 我想我的意思是交互模式。改变了问题。
  • 这不能回答我的问题。你是怎么接触到这个你称之为“交互模式”的东西的?
  • 启动终端,输入python3

标签: python macos unicode


【解决方案1】:

Python 用来读取交互式输入的 readline 库不接受终端发送的非 ASCII 字符。这意味着您的终端模拟器不提供 UTF-8 编码的字符,或者 readline 未配置为接受 UTF-8 输入。

幸运的是,许多流行的程序都使用了 readline,包括 bash shell,因此有很多关于如何让它工作的信息。例如from this article:

如何让 UTF-8 输入正常工作?

  • 在终端 检查员:
    • 在 Emulation 部分中,关闭 Escape non-ASCII 字符选项。
    • 在“显示”部分中,选择 Unicode (UTF-8) 作为 字符集编码。
  • 将以下行添加到您的.profile:

    export LC_CTYPE=en_US.UTF-8
    
  • 将以下行添加到您的.inputrc

    set meta-flag on
    set input-meta on
    set output-meta on
    set convert-meta off 
    
  • 通过 source ~/.profilesource ~/.inputrc 应用更改。

【讨论】:

    【解决方案2】:

    在字符串文字前使用u,使其成为一个unicode字符串。

    string = u"El avión cayó del cielo"
    

    如果这不起作用,则问题出在您的编辑器或终端上,在这种情况下,请尝试添加

    #coding: utf8
    

    在您的 python 程序的前 2 行中的任何一行中,并使用支持 unicode 的适当编辑器。

    【讨论】:

    • 第一个建议不起作用,我根本无法将字符输入到解释器中。我不确定你在第二个建议中的意思。我正在使用 OS-X 附带的终端应用程序,我可以在 shell 中输入字符,但不能在交互模式下在 python 中输入。我已经在sitecustomize.py 中将我的默认编码更改为“utf-8”。
    • 不建议更改默认编码系统范围,这可能会破坏某些库。
    • 不要更改默认编码。 import sys; print(sys.stdout.encoding) 说什么?
    猜你喜欢
    • 1970-01-01
    • 2010-09-15
    • 2010-10-21
    • 2010-10-27
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2015-06-02
    相关资源
    最近更新 更多