使用PHP或bash shell将UTF-8转换为ubuntu中的CP1252

时间:2014-10-15 22:06:41

标签: windows ubuntu encoding utf-8 cp1252

我有一个关于使用PHP或SHELL在Ubuntu中将UTF-8转换为CP1252的问题。

背景:使用PHP或SHELL将csv文件从UTF-8转换为Ubuntu中的CP1252,将文件从Ubuntu复制到Windows,使用nodepad ++打开文件。

环境:

  • Ubuntu 10.04
  • PHP 5.3
  • 带有字母(œ,à,ç)
  • 的文件csv

使用的方法:

  1. 使用PHP
    iconv("UTF-8", "CP1252", "content of file")

    mb_convert_encoding("content of file", "UTF-8", "CP1252")
    如果我检查生成的文件
    file -i name_of_the_file
    显示:
    name_of_the_file: text/plain; charset=iso-8859-1
    我将这个转换后的文件复制到windows并用notepad ++打开,在右下方,我们可以看到编码是ANSI
    当我将编码从ANSI更改为Windows-1252时,特殊字符显示良好。

  2. 使用Shell
    iconv -f UTF-8 -t CP1252" "content of file"
    其余的都是一样的。

  3. 问题:  1.为什么命令文件不直接显示CP1252或ANSI而是显示ISO-8895-1?  2.当我将编码从ANSI更改为Windows-1252时,为什么特殊字符可以很好地显示。

    提前谢谢!

1 个答案:

答案 0 :(得分:0)

1

CP1252和ISO-8859-1非常相似,通常在其中一个中编码的文件看起来与在第二个中编码的文件相同。请参阅Wikipedia以查看Windows-1252中的字符,而不是ISO-8859-1中的字符。

字母àç在两种编码中编码相同。虽然ISO-8859-1没有œ而CP1252没有,但file可能错过了。 AFAIK它不会分析整个文件。

2

“ANSI”是用于Windows中默认非Unicode编码的用词不当。对于西欧语言,ANSI表示Windows-1252。在中欧的情况下,它是Windows-1250,如果是俄语,则是Windows-1251,依此类推。除了Windows之外,没有任何内容使用术语“ANSI”来表示编码。