暴走的茴香 · 增加全景天窗,摩登汽车Modern ...· 1 年前 · |
彷徨的热水瓶 · 欧拉芭蕾猫 - 知乎· 1 年前 · |
留胡子的西瓜 · 山口百惠:最红的年纪嫁给三浦友和,隐退40余 ...· 1 年前 · |
帅气的稀饭 · 2023年4月份ZR-V ...· 1 年前 · |
忐忑的保温杯 · 极星:吉利的保时捷? 关注并标星电动星球Ne ...· 1 年前 · |
我将某些文件从Windows机器复制到Linux机器。因此,所有Windows编码(windows-1252)文件都需要转换为UTF-8。不应更改已采用UTF-8格式的文件。为此,我计划使用
recode
实用程序。如何指定
recode
实用工具只转换windows-1252编码的文件,而不转换UTF8文件?
recode的用法示例:
recode windows-1252.. myfile.txt
这将把
myfile.txt
从windows-1252转换成UTF-8。在这样做之前,我想知道
myfile.txt
实际上是windows-1252编码的,而不是UTF-8编码的。否则,我认为这会损坏文件。
发布于 2010-01-06 23:42:35
你怎么期望重新编码知道一个文件是Windows-1252?从理论上讲,我相信任何文件都是有效的Windows-1252文件,因为它将每个可能的字节映射到一个字符。
现在,当然有一些特征强烈地表明它是UTF-8 -例如,如果它以UTF-8 BOM开头-但它们不是决定性的。
一种选择是首先检测它是否确实是一个完全有效的UTF-8文件,我想……再说一次,这只是一种暗示。
我对recode工具本身并不熟悉,但你可能想看看它是否能够对文件进行相同的编码-如果你对一个无效的文件(即包含无效的UTF-8字节序列的文件)执行此操作,它很可能会将无效的序列转换为问号或类似的东西。此时,您可以通过将文件重新编码为UTF-8并查看输入和输出是否相同来检测该文件是否为有效的UTF-8。
或者,以编程方式完成此操作,而不是使用recode实用程序-例如,在C#中,这将非常简单。
我只想重申一下:所有这些都是启发式的。如果你真的不知道一个文件的编码,没有什么可以100%准确地告诉你。
发布于 2010-01-06 23:50:04
iconv -f WINDOWS-1252 -t UTF-8 filename.txt
发布于 2012-09-20 08:15:38
这是我对类似问题的另一个答案的抄本:
如果对已有的UTF8字符串应用utf8_encode(),它将返回乱码的UTF8输出。
我创建了一个函数来解决所有这些问题。它被称为Encoding::toUTF8()。
你不需要知道字符串的编码是什么。它可以是Latin1 (iso8859-1)、windows1252或UTF8,也可以是它们的混合字符串。Encoding::toUTF8()会将所有内容转换为UTF8。
我这样做是因为一个服务给我提供了一堆乱七八糟的数据,在同一个字符串中混合了UTF8和Latin1。
用法:
$utf8_string = Encoding::toUTF8($utf8_or_latin1_or_mixed_string);
$latin1_string = Encoding::toLatin1($utf8_or_latin1_or_mixed_string);
下载:
https://github.com/neitanod/forceutf8
更新:
我已经包含了另一个函数Encoding::fixUFT8(),它将修复每个看起来乱码的UTF8字符串。
用法:
$utf8_string = Encoding::fixUTF8($garbled_utf8_string);
示例:
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
彷徨的热水瓶 · 欧拉芭蕾猫 - 知乎 1 年前 |