Python 生产 kysl� 而不是 kyslá
Python produces kysl� instead of kyslá
我有一个 HTML 文件 org22.htm
,其中包含一个 JavaScript 部分,如下所示(代码在填充数组 I
时重复):
I = new Array();
I[0] = new Array();
I[0][1] = new Array();
I[0][1][0] = new Array();
I[0][1][0][0] = '\u006A\u0061\u0064\u0072\u006F';
I[0][1][1] = new Array();
I[0][1][1][0]='\u004A\u0061\u0064\u0072\u006F';
I[0][2]='';
I[1] = new Array();
I[1][1] = new Array();
I[1][1][0] = new Array();
I[1][1][0][0] = '\u0047\u0075\u0074\u0065\u006E\u0062\u0065\u0072\u0067\u006F\u0076\u0061';
I[1][1][1] = new Array();
I[1][1][1][0]='\u0067\u0075\u0074\u0065\u006E\u0062\u0065\u0072\u0067\u006F\u0076\u0061';
I[1][1][2] = new Array();
I[1][1][2][0]='\u0047\u0075\u0074\u0065\u006E\u0062\u0065\u0072\u0067\u006F\u0076\u0061\u0020\u0070\u006C\u006F\u0063\u0068\u0061';
I[1][1][3] = new Array();
I[1][1][3][0]='\u0067\u0075\u0074\u0065\u006E\u0062\u0065\u0072\u0067\u006F\u0076\u0061\u0020\u0070\u006C\u006F\u0063\u0068\u0061';
I[1][2]='';
我正在尝试使用 Python 代码来获取字符串的实际值,即 '\u0047\u0075\u0074\u0065\u006E\u0062\u0065\u0072\u0067\u006F\u0076\u0061'
-> 'Gutenbergova'
,但这似乎工作正常。
对于重音字符,我总是得到类似 kysl�
的东西,而不是想要的 kyslá
。
这是我当前的完整代码:
import re
with open("org22.htm","r") as f:
data = f.read()
start = "I = new Array();"
end = "State = new Array();"
s = data
array_r = s[s.find(start)+len(start):s.rfind(end)]
array_r = array_r.split("\n")
count, res = 0, []
for line in array_r:
compare = "I["+str(count)+"][1][0][0] ="
if compare in line:
res.append(line)
count += 1
f = open("dump.TXT","w+")
f.close()
f = open("dump.TXT","a")
for i in res:
unic = i.split("'")[-2]
trans = bytes(unic,"utf-8").decode('unicode-escape') + "\n"
trans = trans.encode('utf-8').decode('utf8')
f.write(trans)
f.close()
None 首先需要你对字符串的编码和解码。
从不 打开未明确指定文件编码的文本文件。这是一个简单的通用规则。如果 you 不知道您正在读取(或写入)的文件的编码,并让 Python 使用任何它感觉使用的默认值,那么所有的赌注都没有了。
HTML 文件往往是 UTF-8 编码的。另一个可能的候选者是 Windows-1252 (cp1252
)。但实际上这取决于文件是如何创建的,所以你必须检查。
这应该与您的想法非常接近。此代码的任何部分都不会处理任何字符串的编码 - open()
会为您完成。
with open("org22.htm", "r", encoding="utf8") as infile:
html = infile.read()
start = "I = new Array();"
end = "State = new Array();"
pos1 = html.find(start) + len(start)
pos2 = html.rfind(end)
lines = html[pos1:pos2].splitlines()
with open("dump.txt", "w", encoding="utf8") as outfile:
for i, line in enumerate(lines):
if f"I[{i}][1][0][0] =" in line:
data = line.split("'")[-2]
outfile.write(data + "\n")
我有一个 HTML 文件 org22.htm
,其中包含一个 JavaScript 部分,如下所示(代码在填充数组 I
时重复):
I = new Array();
I[0] = new Array();
I[0][1] = new Array();
I[0][1][0] = new Array();
I[0][1][0][0] = '\u006A\u0061\u0064\u0072\u006F';
I[0][1][1] = new Array();
I[0][1][1][0]='\u004A\u0061\u0064\u0072\u006F';
I[0][2]='';
I[1] = new Array();
I[1][1] = new Array();
I[1][1][0] = new Array();
I[1][1][0][0] = '\u0047\u0075\u0074\u0065\u006E\u0062\u0065\u0072\u0067\u006F\u0076\u0061';
I[1][1][1] = new Array();
I[1][1][1][0]='\u0067\u0075\u0074\u0065\u006E\u0062\u0065\u0072\u0067\u006F\u0076\u0061';
I[1][1][2] = new Array();
I[1][1][2][0]='\u0047\u0075\u0074\u0065\u006E\u0062\u0065\u0072\u0067\u006F\u0076\u0061\u0020\u0070\u006C\u006F\u0063\u0068\u0061';
I[1][1][3] = new Array();
I[1][1][3][0]='\u0067\u0075\u0074\u0065\u006E\u0062\u0065\u0072\u0067\u006F\u0076\u0061\u0020\u0070\u006C\u006F\u0063\u0068\u0061';
I[1][2]='';
我正在尝试使用 Python 代码来获取字符串的实际值,即 '\u0047\u0075\u0074\u0065\u006E\u0062\u0065\u0072\u0067\u006F\u0076\u0061'
-> 'Gutenbergova'
,但这似乎工作正常。
对于重音字符,我总是得到类似 kysl�
的东西,而不是想要的 kyslá
。
这是我当前的完整代码:
import re
with open("org22.htm","r") as f:
data = f.read()
start = "I = new Array();"
end = "State = new Array();"
s = data
array_r = s[s.find(start)+len(start):s.rfind(end)]
array_r = array_r.split("\n")
count, res = 0, []
for line in array_r:
compare = "I["+str(count)+"][1][0][0] ="
if compare in line:
res.append(line)
count += 1
f = open("dump.TXT","w+")
f.close()
f = open("dump.TXT","a")
for i in res:
unic = i.split("'")[-2]
trans = bytes(unic,"utf-8").decode('unicode-escape') + "\n"
trans = trans.encode('utf-8').decode('utf8')
f.write(trans)
f.close()
None 首先需要你对字符串的编码和解码。
从不 打开未明确指定文件编码的文本文件。这是一个简单的通用规则。如果 you 不知道您正在读取(或写入)的文件的编码,并让 Python 使用任何它感觉使用的默认值,那么所有的赌注都没有了。
HTML 文件往往是 UTF-8 编码的。另一个可能的候选者是 Windows-1252 (cp1252
)。但实际上这取决于文件是如何创建的,所以你必须检查。
这应该与您的想法非常接近。此代码的任何部分都不会处理任何字符串的编码 - open()
会为您完成。
with open("org22.htm", "r", encoding="utf8") as infile:
html = infile.read()
start = "I = new Array();"
end = "State = new Array();"
pos1 = html.find(start) + len(start)
pos2 = html.rfind(end)
lines = html[pos1:pos2].splitlines()
with open("dump.txt", "w", encoding="utf8") as outfile:
for i, line in enumerate(lines):
if f"I[{i}][1][0][0] =" in line:
data = line.split("'")[-2]
outfile.write(data + "\n")