2

我正在尝试将 SPSS 语法文件转换为可读的 HTML。除了将(单个)不可打印字符插入到 HTML 文件中之外,它几乎可以完美地工作。它似乎没有 ASCII 码,看起来像一个小点。它正在造成麻烦。

它(仅)出现在 HTML 文件的第二行,始终对应于原始文件的第一行。这可能暗示了 Python 的哪一行导致了问题(请参阅评论)

似乎导致这种情况的代码是

    rfil = open(fil,"r") #rfil =  Read File, original syntax
    wfil = open(txtFil,"w") #wfil =  Write File, HTML output
    #Line below causes problem??
    wfil.write("<ol class='code'>\n<li>") 
    cnt = 0
    for line in rfil:
        if cnt == 0:
            #Line below causes problem??
            wfil.write(line.rstrip("\n").replace("'",'&#39;').replace('"','&#34;')) 
        elif len(line) > 1:
            wfil.write("</li>\n<li>" + line.strip("\n").replace("'",'&#39;').replace('"','&#34;'))
        else:
            wfil.write("<br /><br />")
        cnt += 1
    wfil.write("</li>\n</ol>")
    wfil.close()
    rfil.close()

结果的屏幕截图

在此处输入图像描述

4

2 回答 2

4

输入文件似乎以字节顺序标记 (BOM)开头,表示 UTF-8 编码。您可以通过打开文件将文件解码为 Unicode 字符串

import codecs
rfil = codecs.open(fil, "r", "utf_8_sig")

utf_8_sig 编码在开始时会跳过 BOM。

有些程序可以识别 BOM,有些则不能。要在没有 BOM 的情况下写出文件,请使用

wfil = codecs.open(txtFil, "w", "utf_8")
于 2013-05-14T09:33:11.807 回答
1

您看到的是字节顺序标记或 BOM。你看到它的方式\xef\xbb\xbf,说你使用的字符串实际上是 UTF-8;您可以将它们转换为正确的 Unicode ( line.decode('utf-8')) 以使操作更容易。

然后,您可以增加第一行的逻辑,以便安全地删除 BOM:

for raw_line in rfil:
    line = raw_line.decode('utf-8') # now line is Unicode
    if cnt == 0 and line[0] == '\ufeff':
        line = line[1:] # cut the first character, which is a BOM
    ...
于 2013-05-14T09:23:25.330 回答