发布
社区首页 >问答首页 >Windows-1252到UTF-8编码

Windows-1252到UTF-8编码
EN

Stack Overflow用户
提问于 2010-01-06 23:39:32
回答 11查看 247.8K关注 0票数 42

我将某些文件从Windows机器复制到Linux机器。因此,所有Windows编码(windows-1252)文件都需要转换为UTF-8。不应更改已采用UTF-8格式的文件。为此,我计划使用recode实用程序。如何指定recode实用工具只转换windows-1252编码的文件,而不转换UTF8文件?

recode的用法示例:

代码语言:javascript
代码运行次数:0
复制
recode windows-1252.. myfile.txt

这将把myfile.txt从windows-1252转换成UTF-8。在这样做之前,我想知道myfile.txt实际上是windows-1252编码的,而不是UTF-8编码的。否则,我认为这会损坏文件。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 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%准确地告诉你。

票数 39
EN

Stack Overflow用户

发布于 2010-01-06 23:50:04

iconv -f WINDOWS-1252 -t UTF-8 filename.txt

票数 78
EN

Stack Overflow用户

发布于 2012-09-20 08:15:38

这是我对类似问题的另一个答案的抄本:

如果对已有的UTF8字符串应用utf8_encode(),它将返回乱码的UTF8输出。

我创建了一个函数来解决所有这些问题。它被称为Encoding::toUTF8()。

你不需要知道字符串的编码是什么。它可以是Latin1 (iso8859-1)、windows1252或UTF8,也可以是它们的混合字符串。Encoding::toUTF8()会将所有内容转换为UTF8。

我这样做是因为一个服务给我提供了一堆乱七八糟的数据,在同一个字符串中混合了UTF8和Latin1。

用法:

代码语言:javascript
代码运行次数:0
复制
$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字符串。

用法:

代码语言:javascript
代码运行次数:0
复制
$utf8_string = Encoding::fixUTF8($garbled_utf8_string);

示例:

代码语言:javascript
代码运行次数:0
复制
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("FÃÂédÃÂération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");

将输出:

代码语言:javascript
代码运行次数:0
复制
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football

更新:我已经在一个名为Encoding的类上将函数(forceUTF8)转换为一系列静态函数。新函数是Encoding::toUTF8()。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2014069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档