Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 傀儡Windows包提供程序编码错误_Ruby_Windows_Encoding_Puppet - Fatal编程技术网

Ruby 傀儡Windows包提供程序编码错误

Ruby 傀儡Windows包提供程序编码错误,ruby,windows,encoding,puppet,Ruby,Windows,Encoding,Puppet,我有一个用于Windows的Puppet清单,用于下载和安装Python。它过去工作得很好。现在,每当它试图处理MSI文件时,它都会给我一些与字符串编码相关的奇怪错误。舱单的相关部分包括: (注意:我正在使用下载MSI。) 以及错误输出: 错误:无法预取包提供程序“windows”:U+2122到IBM437正在从UTF-16LE到UTF-8到IBM437的转换中 错误:/Package[python]:在从UTF-16LE到UTF-8到IBM437的转换中,无法计算:U+2122到IBM437

我有一个用于Windows的Puppet清单,用于下载和安装Python。它过去工作得很好。现在,每当它试图处理MSI文件时,它都会给我一些与字符串编码相关的奇怪错误。舱单的相关部分包括:

(注意:我正在使用下载MSI。)

以及错误输出:

错误:无法预取包提供程序“windows”:U+2122到IBM437正在从UTF-16LE到UTF-8到IBM437的转换中

错误:/Package[python]:在从UTF-16LE到UTF-8到IBM437的转换中,无法计算:U+2122到IBM437

我发现:

  • U+2122是商标字符(™)
  • 错误的格式来自Ruby字符串转换函数,而不是任何特定于木偶的函数
  • 即使清单的这一部分完全由自身运行,也会发生错误
  • puppet apply的调试输出在开头附近列出了“default_encoding=IBM437”,但我没有找到任何方法来更改该设置:
调试:运行时环境:puppet\u version=3.7.5,ruby\u version=2.1.5,run\u mode=user,默认\u编码=IBM437


看起来实际上有一张这样的票:

问题似乎是已经安装了不兼容字符的软件包,并且它尝试预取已经安装的内容:

目前的解决方法(从票据中):

  • 运行“wmic产品获取名称”
  • 查找具有非ascii字符的字符
  • 从注册表中删除外观奇怪的字符

在命令提示符下运行
chcp 65001
,将控制台编码更改为UTF-8


不过,我不知道这将如何适应您的工作流程。

我的一台基础架构笔记本电脑也有类似的问题,这是唯一一台使用Skype的笔记本电脑™ 已安装7.0。我在注册表中进行了搜索,并从每个具有DisplayName或ProductName的注册表项中删除了该TM。它成功了。但是我备份了它以防万一。因此,我确认您可以检查您安装的某个程序的名称中是否有此字符,以便您可以在Windows注册表中删除。不过,请小心。

我尝试运行了该代码在Windows虚拟机上,它对我起了作用:你能试着运行
facter-p
,因为TM符号可能来自系统上的事实。我从powershell运行了命令,输出以以下消息开始:“无法检索事实='network\u local\u area\u connection',resolution='':未定义的方法'any'for nil:NilClass”然后我通过管道将输出传输到一个文本文件。该文件以(十六进制)0xFF 0xFE开头,我认为它被称为“字节顺序标记”除此之外,我在输出中没有看到任何非ascii字符。我对Ruby不太熟悉,但Puppet是从PowerShell脚本调用的。Ruby是否默认为调用它的shell的编码?是的,一些库,如RDoc,甚至将默认编码更改为UTF-8,以避免非ascii字符的问题acters。我很高兴这个bug被发现,而且它被认为是紧急的。但是,该命令的输出没有显示任何非ascii字符,尽管当我将它传输到一个文件时,它得到的0xFF 0xFE与我上面使用facter-r的其他注释相同。无论我使用Cmd还是Powershell,无论当前的控制台编码是什么,都会发生这种情况。I spo虽然代码的输出WMIC产品得到的名称似乎没有显示任何Unicode字符,但是Skype的列表中有一个大写的“T”。所以,可以肯定的是,我卸载了它,当然,错误消失了(虽然它显示了一些错误与其他包……我会考虑单独的问题)。另一个需要考虑的问题是使用巧克力提供者。这就是为什么-实际上,我从巧克力提供者开始之前。问题是,当试图通过巧克力安装Python 1603时,它总是会崩溃,有或没有木偶。e、 它应该是固定的,但它仍然发生在我的系统上。
# 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,
}