如何正确地将编码更改为 cp866?
How to correctly change encoding to cp866?
我正在尝试打印 UTF-8 和 cp866 进程输出。
我的代码:
if "sendcmd " in message.text:
command = message.text.replace("sendcmd ", "")
process = os.popen(command)
answer = process.read()
#print(answer.decode('utf-8').encode('cp866'))
by = bytes(answer, 'utf-8')
print(type(by))
print(repr(by))
process.close()
之后我明白了:
<class 'bytes'>
b'b\'\xe2\x80\x9c\xd0\xb1\xd0\x87\xd2\x90\xd0\xb5: \xd0\x8b\xd0\xb2\xd0\x87\xd0\xb0\xc2\xa0\xd1\x9e\xc2\xab\xd2\x90\xc2\xad \xd0\xb1\xd0\x81\xd0\x88\xc2\xad\xc2\xa0\xc2\xab \xc2\xa7\xc2\xa0\xd1\x9e\xd2\x90\xd0\xb0\xd0\xb8\xd2\x90\xc2\xad\xd0\x81\xd0\xbf \xd0\x87\xd0\xb0\xc2\xae\xd0\xb6\xd2\x90\xd0\xb1\xd0\xb1\xd0\xb3 "whatever.exe" \xd0\xb1 \xd0\x81\xc2\xa4\xd2\x90\xc2\xad\xd0\xb2\xd0\x81\xd0\xb4\xd0\x81\xd0\x84\xc2\xa0\xd0\xb2\xc2\xae\xd0\xb0\xc2\xae\xc2\xac 3720.\n\'
我知道我需要将编码更改为cp866,但我不明白如何实现它=(
更新:这段代码没有帮助:
uni = type(by), repr(by)
print(uni.encode('ascii', 'ignore'))
os.popen
的 read
方法 returns str
,过程的输出会自动解码。 subprocess.Popen
类似于os.popen
,可以自定义;它 returns 原始 bytes
而不是 str
文本:
from subprocess import Popen, PIPE
if "sendcmd " in message.text:
...
process = Popen(command, stdout=PIPE)
answer = process.communicate()[0] # (stdout, stderr)
print(answer.decode('cp866'))
在内部,os.popen
使用 subprocess
模块,您可能需要稍微更改 command
参数。检查 Popen
的 documentation。
我正在尝试打印 UTF-8 和 cp866 进程输出。
我的代码:
if "sendcmd " in message.text:
command = message.text.replace("sendcmd ", "")
process = os.popen(command)
answer = process.read()
#print(answer.decode('utf-8').encode('cp866'))
by = bytes(answer, 'utf-8')
print(type(by))
print(repr(by))
process.close()
之后我明白了:
<class 'bytes'>
b'b\'\xe2\x80\x9c\xd0\xb1\xd0\x87\xd2\x90\xd0\xb5: \xd0\x8b\xd0\xb2\xd0\x87\xd0\xb0\xc2\xa0\xd1\x9e\xc2\xab\xd2\x90\xc2\xad \xd0\xb1\xd0\x81\xd0\x88\xc2\xad\xc2\xa0\xc2\xab \xc2\xa7\xc2\xa0\xd1\x9e\xd2\x90\xd0\xb0\xd0\xb8\xd2\x90\xc2\xad\xd0\x81\xd0\xbf \xd0\x87\xd0\xb0\xc2\xae\xd0\xb6\xd2\x90\xd0\xb1\xd0\xb1\xd0\xb3 "whatever.exe" \xd0\xb1 \xd0\x81\xc2\xa4\xd2\x90\xc2\xad\xd0\xb2\xd0\x81\xd0\xb4\xd0\x81\xd0\x84\xc2\xa0\xd0\xb2\xc2\xae\xd0\xb0\xc2\xae\xc2\xac 3720.\n\'
我知道我需要将编码更改为cp866,但我不明白如何实现它=(
更新:这段代码没有帮助:
uni = type(by), repr(by)
print(uni.encode('ascii', 'ignore'))
os.popen
的 read
方法 returns str
,过程的输出会自动解码。 subprocess.Popen
类似于os.popen
,可以自定义;它 returns 原始 bytes
而不是 str
文本:
from subprocess import Popen, PIPE
if "sendcmd " in message.text:
...
process = Popen(command, stdout=PIPE)
answer = process.communicate()[0] # (stdout, stderr)
print(answer.decode('cp866'))
在内部,os.popen
使用 subprocess
模块,您可能需要稍微更改 command
参数。检查 Popen
的 documentation。