代码之家  ›  专栏  ›  技术社区  ›  snahor

在shell中将文件从iso-8859-1转换为utf-8iconv与使用子进程从python调用文件的结果不同

  •  1
  • snahor  · 技术社区  · 16 年前

    假设我有档案 01234.txt 是iso-8859-1。

    iconv --from-code=iso-8859-1 --to-code=utf-8 01234.txt > 01234_utf8.txt

    import subprocess
    
    p0 = subprocess.Popen([<here the same command>], shell=True)
    p0.wait()
    

    我得到了几乎相同的结果,但新文件丢失了,例如,最后一行和最后一行之前的一部分。

    下面是两个文件的最后三行: iconv结果:


    259871385 |克里斯蒂安阿尔贝托苏亚雷斯维拉洛沃斯| 107
    311015100 |豪尔赫·梅扎·塞万提斯| 09499386

    python结果:

    795719000 |玛丽亚·特雷莎·马里鲁·维拉洛沃斯| 107
    259871385 |克里斯蒂安

    编辑:在我尝试使用的python文件中 coding: utf-8 coding: iso-8859-1 ( 不是两个同时出现

    编辑:我在bpython中使用了编解码器,效果很好。当从一个文件中使用它时,我得到了不想要的结果。

    编辑:我正在使用linux(Ubuntu9.10)和Python2.6.2。

    有什么建议吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   John Machin Santi    16 年前

    现在来谈谈你的问题:

    你写道:“ p0 = subprocess.Popen([<here the same command>], shell=True) "

    更新: 根据这些症状,这里有一个猜测:您正在丢失文件的最后几个字节—看起来像是在消失之前未能刷新缓冲区。截断输出文件的大小是2的整数幂吗?

    也许您不应该依赖命令行处理器来完成 > 01234_utf8.txt 可靠地。如果您省略了命令的这一部分,那么完整的有效负载是否会出现在stdout上?如果是,那么您可以自己打开输出文件,将其句柄作为stdout参数传递,然后执行以下操作来解决问题把手。齐平()和手柄关闭().