我有一个Windows的Puppet清单,用于下载和安装Python(以及其他内容)。过去工作得很好。现在它在尝试处理MSI文件时给出了与字符串编码有关的奇怪错误。清单的相关部分是:
(注意:我使用pget下载MSI。)
# Prepare to download things
$downloads = "C:\\puppet-downloads"
file { $downloads:
ensure => directory
}
Pget {
require => File[$downloads],
target => $downloads,
}
$python = 'python'
$py_version = '2.7.10'
$py_dir = "C:\\Python27"
$py_msi = "python-${py_version}.msi"
$py_msi_path = "${downloads}\\${py_msi}"
pget {'python-msi':
source => "https://www.python.org/ftp/python/${py_version}/${py_msi}",
}
package {$python:
require => Pget['python-msi'],
provider => 'windows',
source => $py_msi_path,
ensure => $py_version,
}
错误输出:
错误:无法从UTF-16LE转换为UTF-8到IBM437,将软件包提供程序' windows':U + 2122预取到IBM437
错误:/ Package [python]:无法评估:从UTF-16LE转换为UTF-8到IBM437的U + 2122到IBM437
我发现了什么:
调试:运行时环境:puppet_version = 3.7.5,ruby_version = 2.1.5,run_mode = user,default_encoding = IBM437
答案 0 :(得分:2)
看起来实际上是为此打开了一张票:https://tickets.puppetlabs.com/browse/PUP-4333
看起来问题是已经安装了不兼容字符的软件包,它会尝试预取已安装的软件包:
现在的解决方法(来自故障单):
答案 1 :(得分:0)
在命令提示符下运行chcp 65001
会将控制台编码更改为UTF-8。
我不知道这将如何适合您的工作流程。
答案 2 :(得分:0)
我的一台基础设施笔记本电脑出现了类似的问题,而且它是唯一一台安装了Skype™7.0的笔记本电脑。我在注册表中进行了搜索,并使用DisplayName或ProductName从每个键中删除了该TM。有效。但是,为了以防万一我备份了。因此,我确认您可以检查您安装的某个程序是否在名称中包含此字符,因此您可以在Windows注册表中删除。但要小心。