我尝试了sys.getdefaultencoding()
,但不幸的是,这不起作用。它在我的系统上返回ascii
,系统区域设置为ja_JP(即编码应为Shift-JIS)。
我正在尝试解析CJK文本(在Windows上)。我需要从键盘读取一些文本,确定系统编码,并将其转换为utf8。我经常在zh_CN(GBK编码)和ja_JP(Shift-JIS编码)之间更改我的系统区域设置,因此硬编码系统编码(键盘输入文本的编码)不是一个选项。任何解决方案?
答案 0 :(得分:4)
解决:sys.stdin.encoding
此外,对于任何尝试sys.getdefaultencoding()
的人来说,根据https://wiki.python.org/moin/DefaultEncoding,它几乎永远不会有效,并始终为ascii
:
它的价值应该是' ascii'它在将字节字符串转换为unicode字符串时使用。
和
如果将非ascii字符放入字节字符串,则.decode(sys.getdefaultencoding())方法将因UnicodeDecodeError而失败,因此字节字符串不应包含非ascii字符。
答案 1 :(得分:1)
由于声誉而无法评论以上答案,但是:
在非tty模式下运行时,请注意// The parent container
mNotificationOverlay = (LinearLayout) findViewById(R.id.container_destacado);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (Message message : m) {
// Inflate the child layout on the fly
final View notificationContainer = inflater.inflate(R.layout.notification_overlay_linear_layout, null);
notificationContainer.setTag(message.getNotificationId());
// Access children of child container
TextView notificationOverlayTitle = (TextView) notificationContainer.findViewById(R.id.notification_title_overlay);
TextView notificationOverlayBody = (TextView) notificationContainer.findViewById(R.id.notification_body_overlay);
ImageButton notificationOverlayCancelButton = (ImageButton) notificationContainer.findViewById(R.id.notification_cancel_overlay);
// Perform desired operations
notificationOverlayCancelButton.setTag(message.getNotificationId());
notificationOverlayTitle.setText(message.getTitle());
notificationOverlayBody.setText(message.getNotificationBody());
mNotificationOverlay.setVisibility(View.VISIBLE);
// Attach any listeners
attachListenersToCancelView(notificationOverlayCancelButton);
// Add view to parent container
mNotificationOverlay.addView(notificationContainer);
}
:
sys.[stdin|stdout].encoding
如您所见,使用$ tty
/dev/pts/2
$ python2 -c'import locale, sys; print(sys.stdout, type(sys.stdout), sys.stdin.encoding, locale.getpreferredencoding())'
(<open file '<stdout>', mode 'w' at 0x7fa77abff150>, <type 'file'>, 'UTF-8', 'UTF-8')
$ ssh $HOSTNAME tty
not a tty
$ ssh $HOSTNAME "python2 -c'import locale, sys; print(sys.stdout, type(sys.stdout), sys.stdin.encoding, locale.getpreferredencoding())'"
(<open file '<stdout>', mode 'w' at 0x7f7991c43150>, <type 'file'>, None, 'UTF-8')
可能更安全。
(Py3上没有问题,所以这只是出于2020年的历史记录;-))。