【问题标题】:Changing the preferred encoding for Windows7 command prompt更改 Windows7 命令提示符的首选编码
【发布时间】:2014-07-14 20:43:39
【问题描述】:

使用 Python3.3

运行 python 脚本进行一些 CAD 文件转换,但出现以下错误

Conversion Failed
Traceback (most recent call last):
File "Start.py", line 141, in convertLib
lib.writeLibrary(modFile,symFile)
File "C:\Python33\Eagle2Kicad/Library\Library.py", line 67, in writeLibrary
self.writeSymFile(symFile)
File "C:\Python33\Eagle2Kicad/Library\Library.py", line 88, in writeSymFile
devicepart.write(symFile)
File "C:\Python33\Eagle2Kicad/Common\Symbol.py", line 51, in write
symbol.write(symFile)
File "C:\Python33\Eagle2Kicad/Common\Symbol.py", line 114, in write
symFile.write(pin.symRep())
File "C:\Python33\Lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\x96' in position 4:     character maps to <undefined>

我的 Windows7 命令提示符中的首选编码似乎是 NOT cp1252(键入 chcp 显示“活动代码页 437”)。怎么改成cp1252?

谁能推荐一下?

编辑:

由于 python 命令行的默认首选编码是 cp1252,我尝试从 python 命令行而不是 windows 命令提示符运行脚本。但我仍然遇到与上述相同的错误。谁能推荐一下?

【问题讨论】:

  • 您正在写入文件。文件的默认编码是locale.getpreferredencoding(False),并且不是由您的控制台设置决定的;改为在打开文件时指定显式编码。
  • 请注意,您通常会向我们展示触发异常的代码;我必须在这里假设symFile.write(pin.symRep()) 中的symFile 是用open(filename, 'w') 或类似文件打开的文件对象。
  • 您可以使用 cmd 启动脚本来配置控制台(chcpcolortitle)、设置环境变量和加载 doskey 别名。我使用"%APPDATA%\autorun.cmd" 并设置一个注册表项以在 cmd 启动时运行此脚本:reg add "HKCU\Software\Microsoft\Command Processor" /f /v AutoRun /t REG_EXPAND_SZ /d "\"^%APPDATA^%\autorun.cmd\""
  • @MartijnPieters 谢谢。它在显式添加编码类型open(modFileName,'w', encoding='utf-8').close()open(symFileName,'w', encoding='utf-8').close()modFile=open(modFileName,"a", encoding='utf-8')symFile=open(symFileName,"a", encoding='utf-8')

标签: python encoding character-encoding command-prompt


【解决方案1】:

写入文件时,不考虑控制台编码;只有语言环境是。来自open() function documenation

在文本模式下,如果未指定 encoding,则使用的编码取决于平台:调用locale.getpreferredencoding(False) 以获取当前的语言环境编码。

在您的系统上,显然该调用返回'cp1252'。补救措施是始终明确地命名文件的编码;传入一个encoding 参数来为文件设置所需的编码:

with open(filename, 'w', encoding='utf8') as symFile:

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 2014-09-09
    • 2013-09-07
    • 2012-08-15
    • 2019-01-26
    相关资源
    最近更新 更多