相关疑难解决方法(0)

python3中的UnicodeEncodeError

我的一些应用程序库依赖于能够将 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'

我能做什么?我不想编辑第三方库。

python unicode locale utf-8 python-3.x

6
推荐指数
1
解决办法
2208
查看次数

git-p4 消息和作者编码

今天我可以将一些相当旧的 perforce 存储库迁移到 git。虽然这确实很有趣,但有一件事引起了我的注意。提交消息中的所有特殊字符甚至作者姓名的编码都不正确。

所以我试图调查问题出在哪里。

  • 首先perforce服务器不支持unicode,所以设置P4CHARSET没有效果,但是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)

python git bash perforce git-p4

5
推荐指数
1
解决办法
1391
查看次数

Persist UTF-8 as Default Encoding

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 …

python utf-8 utf

5
推荐指数
2
解决办法
2万
查看次数

Python - file.write() 导致中文文本

当我在无限循环中将某个字符串写入文件时,例如:

file = open('txt.txt', 'w')
while 1:
    file.write('colour')
Run Code Online (Sandbox Code Playgroud)

它给了我所有这些中文文本: 图片

为什么会发生这种情况?

python-3.5

5
推荐指数
1
解决办法
729
查看次数

pandas to_csv 创建空的、未指定的文件

我是 Python 和编程的新手,所以这可能是一个愚蠢的问题。

我目前正在准备使用 PsychoPy v1.90.2 独立版、python 2.7、编码器版本的心理学实验,基于现有脚本和同事的教程。它在我的计算机 (Mac) 和 Windows 10 计算机上完美运行,但在使用 Windows7 的计算机上,它不会将输出(即参与者的响应)保存到 csv 文件。创建一个空文件,没有任何文件规范,但文件名正确且位置正确。

  • 我可以正确导入底层 csv 文件以创建刺激
  • 如果我包含print df,我可以在控制台中看到数据框,所以数据存在于某处,至少是暂时的
  • 我的系统 (Mac) 是德语,但 Windows 10 和 7 计算机设置为法语
  • 根本没有错误信息。
  • 我之前在(比利时)法国 Mac 上成功完成了这个实验。

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)

python csv python-2.7 pandas psychopy

5
推荐指数
1
解决办法
4901
查看次数

使用xlrd读取包含中文和/或印地文字符的Excel xls文件

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 xls xlrd cjk hindi

4
推荐指数
2
解决办法
1万
查看次数

Python 3 设置默认字节编码

在 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)

python encoding byte python-3.x

4
推荐指数
1
解决办法
2941
查看次数

Python3 utf-8 解码问题

以下代码在我的 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 linux windows utf-8 python-3.x

4
推荐指数
1
解决办法
5691
查看次数

Python默认字符串编码

Python 何时、何地以及如何将编码隐式应用于字符串或进行隐式转码(转换)?

那些“默认”(即隐含)编码是什么?

例如,什么是编码:

python character-encoding python-2.x python-3.x python-unicode

4
推荐指数
1
解决办法
6077
查看次数

无法在Python中打印泰米尔语字符

我想在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中设置它?

python unicode tamil

1
推荐指数
1
解决办法
1558
查看次数

正则表达式删除了特殊字符

我正在使用正则表达式遇到以下问题:我编写了一个程序,它从一些文本(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)

java regex

1
推荐指数
1
解决办法
96
查看次数

这些角色有何不同?

我不确定为什么这些字符是不同的,因为它们在视觉上看起来是相同的.它们是同一个角色的不同表现形式吗?或实际上不同的人物?有没有一种方法可以检查它们的相等性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)

python unicode python-2.7

1
推荐指数
1
解决办法
73
查看次数