2017-05-05 137 views
9

我与木偶文件编码地狱。 即使是最简单的尝试不起作用:编码地狱木偶

hiera-data/test.yaml: 
--- 
test: Äñö 

init.pp: 
    $test = hiera('test') 
    file { "/root/encoding.txt": 
    ensure => file, 
    content => $test 
    } 
的傀儡服务器一切

看起来不错:

puppet:~ # file -i /etc/puppetlabs/puppet/hiera-data/env/test.yaml 
/etc/puppetlabs/puppet/hiera-data/env/test.yaml: text/plain charset=utf-8 
puppet:~ # cat /etc/puppetlabs/puppet/hiera-data/env/test.yaml 
--- 
test: Äñö 
puppet:~ # locale 
LANG=POSIX 
LC_CTYPE=en_US.UTF-8 

的傀儡代理:

puppet-test:~ # locale 
LANG=POSIX 
LC_CTYPE=en_US.UTF-8 

运行后:

puppet-test:~ # file -i encoding.txt 
encoding.txt: text/plain charset=utf-8 

但是:

cat encoding.txt

更新:这里由约翰在评论中问道,十六进制数据(与vi :%!xxd查看它):

0000000: efbf bdef bfbd efbf bdef bfbd efbf bdef ................ 
0000010: bfbd 0a         ... 

更新:如要求在评论Peter直接运行hiera并没有提供任何进一步的见解。特别是,我只能在服务器上尝试它,因为代理没有源代码。 enter image description here

我的环境是相当过时了,但我不允许使用任何新的版本(至少目前还没有,没有任何正当理由):

  • 的SuSE Enterprise Linux的11 Service Pack 3的
  • 木偶企业3.8.6
  • PE-红宝石1.9.3.551-9.pe.sles11

我将不胜感激任何了解这个问题!

非常感谢提前

+5

你确定,这个问题是不是你的终端?在十六进制编辑器中(或在二进制/十六进制模式的文本编辑器中)打开'encoding.txt'并检查文件是否包含正确的字节。特别是,你所提供的字符串的UTF-8编码将由这六个字节组成:'c3 84 c3 b1 c3 b6'。如果它包含不同的内容,请将其添加到您的问题中。 –

+0

我更新了信息丢失的问题,谢谢@JohnBollinger – mmoossen

+0

第二次看在这之后,这似乎并不像一个傀儡问题。这看起来像是一个系统环境问题。 –

回答

0

有LANG = POSIX可以肯定使事情扭曲。 LANG是什么决定了控制台显示的编码。通常需要使LANG和LC_TYPE匹配。

参见:Explain the effects of export LANG, LC_CTYPE, LC_ALL

以及有关LANG = POSIX的详细信息请参见http://pubs.opengroup.org/onlinepubs/7908799/xbd/locale.html#tag_005_002

此外,在一个不相关的音符,木偶3.8肯定有缺陷,围绕正确显示和/或持续Unicode字符。在最近的Puppet构建中已经完成了很多工作,以完全国际化(并本地化)Puppet。

+0

Hi @Sam,对不起,但你的答案,也没有链接,给我任何接下来要尝试的粘合剂...无论如何,我使用'LANG = de_DE.UTF-8'在节点上得到相同的结果。但仍然非常感谢回答... – mmoossen