我正试图从网站上获取一个字符串.我使用请求模块发送GET
请求.
text = requests.get("http://example.com") #send GET requests to the website
print text.text #print the variable
Run Code Online (Sandbox Code Playgroud)
但是,出于某种原因,文字出现在Gibberish而不是希伯来语中:
<div>
<p>שרת</p>
</div>
Run Code Online (Sandbox Code Playgroud)
当我用Fiddler嗅到流量或在我的浏览器中查看网站时,我用希伯来语看到它:
<div>
<p>???</p>
</div>
Run Code Online (Sandbox Code Playgroud)
顺便说一句,html
代码包含定义编码的元标记,即utf-8
.我试图对文本进行编码,utf-8
但仍然是乱码.我尝试使用utf-8
它来取消它,但它会引发UnicodeEncodeError
异常.我声明我正在使用utf-8
脚本的第一行.而且,当我使用内置urllib
模块发送请求时,问题也会发生.
我读了Unicode HOWTO,但仍无法修复它.我还在这里阅读了许多线程(关于UnicodeEncodeError
异常以及为什么希伯来语在Python中变成乱码)但我仍然无法修复它.
我在Windows机器上使用Python 2.7.9.我在Python IDLE中运行我的脚本.
提前致谢.
我正在创建一个简单的脚本,它使用Reportlab pdf生成模块将图像列表作为输入并输出pdf文件.该脚本采用如上所示的文件名:
from reportlab.pdfgen import canvas
filename = raw_input("Enter pdf filename: ")
c = canvas.Canvas(filename + ".pdf")
c.save()
Run Code Online (Sandbox Code Playgroud)
一切都很棒,直到用户输入非英语文件名(希伯来语,阿拉伯语),导致代码抛出以下异常:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xf9 in position 0: invalid start byte
Run Code Online (Sandbox Code Playgroud)
所以,我决定使用unicode,但是当我使用unicode()
它时会抛出另一个例外:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf9 in position 0: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
但是,当我解码字符串编码时,它就像一个魅力(希伯来语示例):
from reportlab.pdfgen import canvas
filename = raw_input("Enter pdf filename: ")
filename = filename.decode("windows-1255")
c = canvas.Canvas(filename + ".pdf")
c.save()
Run Code Online (Sandbox Code Playgroud)
我继续尝试另一种方法,并发现如果我u
在上面的例子中写字符串之前,它可以用任何语言工作:
from reportlab.pdfgen import canvas
filename …
Run Code Online (Sandbox Code Playgroud) 我有一个字符串,其中包含我从Web解析的一些数据,并创建一个以此数据命名的文件.
string = urllib.urlopen("http://example.com").read()
f = open(path + "/" + string + ".txt")
f.write("abcdefg")
f.close()
Run Code Online (Sandbox Code Playgroud)
问题是它可能包含以下字符之一:\ / * ? : " < > |
.我正在使用Windows,禁止在文件名中使用这些字符.此外,string
在Unicode formar中,大多数解决方案都没用.
所以,我的问题是:剥离这些角色的最有效/ pythonic方式是什么?提前致谢!
编辑:文件名是Unicode格式而不是 str!