关于 CLI 下打印中文字符问题。(并非伸手党)内置详细环境配置。希望有同学为我答疑解惑。那个贴描述不清, 下面添加详细信息。网络多为英文信息, 对中文没什么支持。

2016-08-21 23:03:10 +08:00
 theodorus
源码:
[root@Debian 4test]#cat test.py
#!/usr/bin/python
# _*_ coding: utf-8 _*_

print u"\u5929"

环境 1:
在 mac 自带终端下, 可以打印出字符非常顺利。 mac 的 terminal 是支持 UTF-8 和 GBK 或者其他乱七八糟的编码的。所以这也合情合理。

环境 2:
通过 ssh 连接 debian 可以再次运行, 会报错如下
[root@Debian 4test]#./test.py
Traceback (most recent call last):
File "./test.py", line 5, in <module>
print u"\u5929"
UnicodeEncodeError: 'ascii' codec can't encode character u'\u5929' in position 0: ordinal not in range(128)
搜索最后的报错信息, http://www.saltycrane.com/blog/2008/11/python-unicodeencodeerror-ascii-codec-cant-encode-character/, 个人认为解决方法复杂不好。

环境详细配置:
[root@Debian 4test]#locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

库文件信息
[root@Debian 4test]#tree /usr/lib/locale
/usr/lib/locale
|-- C.UTF-8
| |-- LC_ADDRESS
| |-- LC_COLLATE
| |-- LC_CTYPE
| |-- LC_IDENTIFICATION
| |-- LC_MEASUREMENT
| |-- LC_MESSAGES
| | `-- SYS_LC_MESSAGES
| |-- LC_MONETARY
| |-- LC_NAME
| |-- LC_NUMERIC
| |-- LC_PAPER
| |-- LC_TELEPHONE
| `-- LC_TIME
`-- locale-archive

2 directories, 13 files

希望得到指点。我目前感觉是没有中文字体库的原因。我安装的是最小的(standard)版本。
1459 次点击
所在节点    Python
2 条回复
billlee
2016-08-21 23:48:21 +08:00
建议在 python 下执行以下程序,看看输出

```python
import os
import sys


print(sys.stdout.encoding)
print({k: v for k, v in os.environ.iteritems() if k.startswith('LC') or k == 'LANG'})
```

我猜你的环境下 sys.stdout.encoding 是有问题的
adoal
2016-08-22 00:22:04 +08:00
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

看起来像是系统的 locale 库有问题。你用
dpkg-reconfigure locales
重建一下 locale 库试试,记得选中 en_US.UTF-8

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/300834

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX