我有一个关于使用PHP或SHELL在Ubuntu中将UTF-8转换为CP1252的问题。
背景:使用PHP或SHELL将csv文件从UTF-8转换为Ubuntu中的CP1252,将文件从Ubuntu复制到Windows,使用nodepad ++打开文件。
环境:
使用的方法:
使用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时,特殊字符显示良好。
使用Shell
iconv -f UTF-8 -t CP1252" "content of file"
其余的都是一样的。
问题: 1.为什么命令文件不直接显示CP1252或ANSI而是显示ISO-8895-1? 2.当我将编码从ANSI更改为Windows-1252时,为什么特殊字符可以很好地显示。
提前谢谢!
答案 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”来表示编码。