为什么我的`write`在OSX上给出UnicodeDecodeError而不是Linux?

时间:2018-02-23 09:26:57

标签: python macos python-2.7 scons

我在scons构建文件中有这段代码:

with io.open(target[0].get_path(), 'w', encoding="utf-8") as target_file:
            target_file.write( unicode("std::string {} = R\"~~~~({})~~~~\";").format(varName,content))

content变量将包含非ascii字符。在OSX上我没有问题,但在Linux上我遇到UnicodeDecodeError: 'ascii' codec can't decode byte错误。

奇怪的是,如果我只使用open,请删除编码,然后将unicode位反向发生:它适用于Linux而不适用于OSX。

with open(target[0].get_path(), 'w') as target_file:
    target_file.write( "std::string {} = R\"~~~~({})~~~~\";".format(varName,content))

有什么问题,我该如何解决?

版本:

  • OSX Python:2.7.10
  • OSX Scons:3.0.1
  • Linux Python:2.7.12
  • Linux Scons:2.4.1

1 个答案:

答案 0 :(得分:1)

当您将作为参数传递的某些变量包含非ascii字符时,

format()有时会失败,而基本字符串则为ascii。

关于为什么它可以在OSX而不是Linux上运行,每个操作系统都有一种特定的方式来处理字符编码,这可能会导致这种问题。

试试这个:

"your sting {} ".encode('utf-8').format(.....