我有一个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()
首先不需要对字符串进行编码和解码。
Never打开文本文件,而无需显式指定文件的编码。这是一个简单的通用规则。如果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")