gpt4 book ai didi

windows - Python 2.7 中子进程模块输出的编码是什么?

转载 作者:可可西里 更新时间:2023-11-01 10:45:21 26 4
gpt4 key购买 nike

我正在尝试在 64 位 Windows Vista 上使用 python2.7 检索压缩存档的内容。我尝试使用子进程模块对 7zip(我最喜欢的存档管理器)进行系统调用:

# -*- coding: utf-8 -*-
import sys, os, subprocess

Extractor = r'C:\Program Files\7-Zip\7z.exe'
ArchiveName = r'C:\temp\bla.zip'
output = subprocess.Popen([Extractor,'l','-slt',ArchiveName],stdout=subprocess.PIPE).stdout.read()

只要存档内容只包含 ascii 文件名,这就可以正常工作,但是当我尝试使用非 ascii 时,我得到一个编码输出字符串变量,其中 ä、ë、ö、ü 已被\x84、\x89 替换,\x94,\x81 (等等)。我已经尝试了各种解码/编码调用,但我对 python 太缺乏经验(而且通常太愚蠢)无法使用变音符号重现原始字符(如果我想跟进此步骤,则这是必需的,例如对 7z 的提取子进程调用)。

简单地说,我的问题是:如何使它也适用于非 ASCII 内容的文件?

... 或者换一种更复杂的方式:子进程的输出是否总是固定编码?在前一种情况下 -> 它是哪种编码?在后一种情况下 -> 如何控制或发现子流程输出的编码?受此博客上类似问题的启发,我尝试添加

import codecs
sys.stdout = codecs.getwriter('utf8')(sys.stdout)

我也试过了

my_env = os.environ
my_env['PYTHONIOENCODING'] = 'utf-8'
output = subprocess.Popen([Extractor,'l','-slt',ArchiveName],stdout=subprocess.PIPE,env=my_env).stdout.read()

但似乎都没有改变输出变量的编码(或重现元音变音)。

最佳答案

您可以尝试使用 7zip 中的 -sccUTF-8 开关强制以 utf-8 格式输出。这是引用页:http://en.helpdoc-online.com/7-zip_9.20/source/cmdline/switches/scc.htm

关于windows - Python 2.7 中子进程模块输出的编码是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28941133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com