我有一个关于在Ubuntu中使用PHP或SHELL将UTF-8转换为CP1252的问题。
背景:在Ubuntu中用PHP或SHELL将csv文件从UTF-8转换为CP1252,将文件从Ubuntu复制到Windows,用nodepad++打开文件。
环境:
- Ubuntu 10.04
- PHP 5.3
- 带有字母(œ,à,ç)的csv文件
使用的方法:
-
使用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中,并用记事本++打开,在右下角,我们可以看到编码是ANSI
当我将编码从ANSI更改为Windows-1252时,特殊字符显示得很好。 -
带外壳
iconv -f UTF-8 -t CP1252" "content of file"
其余的都一样。
问题:1.为什么命令文件没有直接显示CP1252或ANSI,而是显示ISO-8895-1?2.为什么当我将编码从ANSI改为Windows-1252时,特殊字符可以很好地显示。
提前谢谢!
1。
CP1252和ISO-8859-1非常相似,通常其中一个文件中编码的文件与第二个文件中的文件看起来完全相同。请参阅维基百科,了解哪些字符在Windows-1252中,而不是在ISO-8859-1中。
字母à
和ç
在两种编码中被相同地编码。虽然ISO-8859-1没有œ
,CP1252有,但file
可能没有。AFAIK不会分析整个文件。
2.
"ANSI"在Windows中用于默认的非Unicode编码时用词不当。对于西欧语言,ANSI的意思是Windows-1252。对于中欧,它是Windows-1250,对于俄语,它是Windows-1251,依此类推。除了Windows之外,没有任何东西使用术语"ANSI"来指代编码。