Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何在忽略不可编码字符的情况下输出Python3(unicode)字符串_Python 3.x_Unicode_Character Encoding - Fatal编程技术网

Python 3.x 如何在忽略不可编码字符的情况下输出Python3(unicode)字符串

Python 3.x 如何在忽略不可编码字符的情况下输出Python3(unicode)字符串,python-3.x,unicode,character-encoding,Python 3.x,Unicode,Character Encoding,考虑以下终端命令行 python3 -c 'print("hören")' 在大多数终端上打印“hören”(德语中“to hear”的意思),在某些终端上会出现错误 UnicodeEncodeError: 'ascii' codec can't encode character '\xf6' in position 1: ordinal not in range(128) 在我的Python3程序中,我不希望仅仅打印出来的东西会引发这样的异常,相反,我更希望输出不会引发异常的字符 所以我

考虑以下终端命令行

python3 -c 'print("hören")'
在大多数终端上打印“hören”(德语中“to hear”的意思),在某些终端上会出现错误

UnicodeEncodeError: 'ascii' codec can't encode character '\xf6' 
in position 1: ordinal not in range(128)
在我的Python3程序中,我不希望仅仅打印出来的东西会引发这样的异常,相反,我更希望输出不会引发异常的字符

所以我的问题是:如何在忽略不可编码字符的情况下以Python3(unicode)字符串输出?


一些注释 我到目前为止所做的尝试

  • 我尝试使用
    sys.stdout.write
    而不是
    print
    ,但编码问题仍然可能发生

  • 我尝试通过将字符串编码为“是”

    bytes=line.encode('utf-8')
    
    这不会在打印时引发异常,但即使在有能力的终端中,非ascii字符也会被其代码点编号替换

  • 我尝试使用
    decode
    方法和
    'ignore'
    参数:

    bytes=line.encode('utf-8')
    decoded=bytes.decode('utf-8', 'ignore')
    print(decoded)
    
    但问题不在于字符串中的解码,而在于打印函数中的编码

  • 这里的一些终端似乎不能使用所有字符

    • macOS上Emacs内部的bash shell

    • 通过
      do shell script
      接收Applescript中的“打印”字符串,例如:

      set txt to do shell script "/usr/local/bin/python3 -c \"print('hören')\" "
      

    更新:这些终端都从
    区域设置返回。GetPreferredEncode()
    US-ASCII

    我的首选方法是根据您使用的终端设置变量

    对于启用UTF-8的终端,您可以执行以下操作:

    export PYTHONIOENCODING='utf-8'
    
    export PYTHONIOENCODING='ascii:replace'
    
    要在ASCII终端中打印“?”,可以执行以下操作:

    export PYTHONIOENCODING='utf-8'
    
    export PYTHONIOENCODING='ascii:replace'
    
    或者更好,如果您不关心编码,您应该能够:

    export PYTHONIOENCODING=':replace'
    

    回答得好!我在设置
    export LANG=en_AU.UTF-8
    方面取得了一定的成功,但这相当于bruce force;你的方法更有针对性。