我的一些应用程序库依赖于能够将 UTF-8 字符打印到 stdout 和 stderr。因此,这不能失败:
print('\u2122')
Run Code Online (Sandbox Code Playgroud)
在我的本地机器上它可以工作,但在我的远程服务器上它引发 UnicodeEncodeError: 'ascii' codec can't encode character '\u2122' in position 0: ordinal not in range(128)
我试过$ PYTHONIOENCODING=utf8没有明显效果。
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
Run Code Online (Sandbox Code Playgroud)
工作了一段时间,然后停止并最终失败 ValueError: underlying buffer has been detached
sys.getdefaultencoding()返回'utf-8', 并sys.stdout.encoding返回'ANSI_X3.4-1968'
我能做什么?我不想编辑第三方库。
今天我可以将一些相当旧的 perforce 存储库迁移到 git。虽然这确实很有趣,但有一件事引起了我的注意。提交消息中的所有特殊字符甚至作者姓名的编码都不正确。
所以我试图调查问题出在哪里。
Unicode clients require a unicode enabled server.p4 userswich 实际上在 ANSI 中(咨询 notepad++,或根据file -bi重定向输出的 ISO-8859-1)locale显示 LANG=en_US.UTF-8 ...毕竟我的猜测是所有 p4 客户端输出都采用 ISO-8859-1 格式,但 git-p4 假定采用 UTF-8 格式。
我尝试重写提交消息
git filter-branch --msg-filter 'iconv -f iso-8859-1 -t utf-8' -- --all
Run Code Online (Sandbox Code Playgroud)
但这并不能解决问题,特别是因为它无意重写作者姓名。
有人猜测如何在 git-p4 接收输出之前强制将输出转换为 UTF-8 吗?
更新:
我试图用一个简单的 shell 脚本“覆盖”默认的 p4 命令输出,该脚本是我添加到 PATH 中的
/usr/bin/p4 $@ | iconv -f iso-8859-1 -t utf-8
Run Code Online (Sandbox Code Playgroud)
但这会破坏明显使用的编组Python对象:
File "/usr/local/bin/git-p4", line 2467, in getBranchMapping
for …Run Code Online (Sandbox Code Playgroud) I tried to persist UTF-8 as the default encoding in Python.
I tried:
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
Run Code Online (Sandbox Code Playgroud)
And I also tried:
>>> import sys
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('UTF8')
>>> sys.getdefaultencoding()
'UTF8'
>>>
Run Code Online (Sandbox Code Playgroud)
But after closing the session and opening a new session, the following was the result:
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
Run Code Online (Sandbox Code Playgroud)
How can I persist my changes? (I know that it's not always a good idea to change to UTF-8. It's in a …
当我在无限循环中将某个字符串写入文件时,例如:
file = open('txt.txt', 'w')
while 1:
file.write('colour')
Run Code Online (Sandbox Code Playgroud)
它给了我所有这些中文文本: 图片
为什么会发生这种情况?
我是 Python 和编程的新手,所以这可能是一个愚蠢的问题。
我目前正在准备使用 PsychoPy v1.90.2 独立版、python 2.7、编码器版本的心理学实验,基于现有脚本和同事的教程。它在我的计算机 (Mac) 和 Windows 10 计算机上完美运行,但在使用 Windows7 的计算机上,它不会将输出(即参与者的响应)保存到 csv 文件。创建一个空文件,没有任何文件规范,但文件名正确且位置正确。
from psychopy import visual, core, event, gui, info, data
import pandas as pd
import numpy as np
import os
import random
import sys
import time
GUI = gui.Dlg(title = "example")
GUI.addField('participant:')
GUI.show()
if GUI.OK:
metadata = GUI.data
else:
sys.exit('participant cancelled')
w = visual.Window([1000, 600], color='black', units='pix') …Run Code Online (Sandbox Code Playgroud) http://scienceoss.com/read-excel-files-from-python/comment-page-1/#comment-1051
从上面的链接,我使用此实用程序来读取XLS文件.如果XLS文件包含不同的语言字符(如中文或印地语),则无法正确输出.这有解决方法吗?
谷歌搜索后,我发现了这个:
import xlrd
def upload_xls(dir,file,request):
try:
global msg
global row_num
row_num = []
header_arr = []
global file_path
file_path = dir
#reader = csv.reader(open(file), delimiter='#', quotechar='"')
book = xlrd.open_workbook('dodgy.xls',encoding='cp1252') ##To specify UTF8-encoding
wb.sheet_names()
sh = wb.sheet_by_index(0)
valid_xl_format = 0
invalid_xl_format = 0
except:
print "Error
Run Code Online (Sandbox Code Playgroud)
但是该行有一个错误book = open_workbook('dodgy.xls',encoding='cp1252'):
TypeError: open_workbook() got an unexpected keyword argument 'encoding'
在 Python 3 中,bytes需要一个编码:
bytes(s, encoding="utf-8")
Run Code Online (Sandbox Code Playgroud)
有没有办法设置默认编码,所以bytes总是用 UTF-8 编码?
我想象的最简单的方法是
def bytes_utf8(s):
return bytes(s, encoding="utf-8")
Run Code Online (Sandbox Code Playgroud) 以下代码在我的 Windows 机器上使用 Python3 运行良好,并打印字符“é”:
data = b"\xc3\xa9"
print(data.decode('utf-8'))
Run Code Online (Sandbox Code Playgroud)
但是,在基于 Ubuntu 的 docker 容器上运行相同的结果:
UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 0: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
是否需要安装任何东西才能启用 utf-8 解码?
Python 何时、何地以及如何将编码隐式应用于字符串或进行隐式转码(转换)?
那些“默认”(即隐含)编码是什么?
例如,什么是编码:
字符串文字?
s = "Byte string with national characters"
us = u"Unicode string with national characters"
Run Code Online (Sandbox Code Playgroud)
类型转换为 Unicode 或从 Unicode 转换时的字节字符串?
data = unicode(random_byte_string)
Run Code Online (Sandbox Code Playgroud)
何时将字节和 Unicode 字符串写入文件或终端?
print(open("The full text of War and Peace.txt").read())
Run Code Online (Sandbox Code Playgroud)
python character-encoding python-2.x python-3.x python-unicode
我想在Python中使用Tamil语言.但遇到了困难.这是我的代码
U=u'\u0B83'
print U
Run Code Online (Sandbox Code Playgroud)
这会抛出错误,
UnicodeEncodeError:'ascii'编解码器无法对位置0中的字符u'\ u0b83'进行编码:序数不在范围内(128)
我在ascii中的违约行为.由于u0b83已经是unicode,它应该打印泰米尔语中的角色.
我也试过这个,# - - 编码:utf-8 - - .但结果是一样的.
如何在unicode中设置它?
我正在使用正则表达式遇到以下问题:我编写了一个程序,它从一些文本(txt)文件中读取单词并写入另一个文件,每行写一个单词.
一切正常,除非读取的单词中包含特殊字符?š??žýáíé.正则表达式删除char并将特殊字符所在的单词拆分.
例如:
输入:
I am Jožo.
输出:
I
am
Jo
o
Run Code Online (Sandbox Code Playgroud)
这是代码的片段:
while( (line = br.readLine())!= null ){
Pattern p = Pattern.compile("[\\w']+");
Matcher m = p.matcher(line);
}
Run Code Online (Sandbox Code Playgroud) 我不确定为什么这些字符是不同的,因为它们在视觉上看起来是相同的.它们是同一个角色的不同表现形式吗?或实际上不同的人物?有没有一种方法可以检查它们的相等性True?
>>> s = u'\u2022'
>>> ss = '•'
>>> s == ss
False
>>> print u'\u2022' , '•'
• •
>>> ss = unicode(ss)
>>> ss == s
False
>>> repr(ss)
"u'\\xe2\\x80\\xa2'"
>>> repr(s)
"u'\\u2022'"
Run Code Online (Sandbox Code Playgroud)