首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换编码格式

转换编码格式
EN

Stack Overflow用户
提问于 2013-12-23 13:44:50
回答 3查看 2.1K关注 0票数 0

在超级搜索了一个在perl中转换编码文件的方法之后,我总是问自己什么是最好的方法。

我的问题很简单:我有许多不同编码的文件(UTF-8,ISO-8859-1,windows-1252 .)而且,我想转换ISO-8859-1中的所有这些文件.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-23 13:55:07

文本:Iconv是非常有效和非常快的转换从和到大多数编码。它的使用也非常简单

代码语言:javascript
复制
use Text::Iconv;
$converter = Text::Iconv->new("fromcode", "tocode");
$converted = $converter->convert("Text to convert");

一个简单的例子

代码语言:javascript
复制
use Text::Iconv;
my $converter = Text::Iconv->new("utf8", "iso-8859-1");
my $iso_8859_1_string = $converter->convert($some_utf8_string);

如果您不知道要转换的文件的编码,可以使用编码::检测::检测器自动查找编码。

代码语言:javascript
复制
use Encode::Detect::Detector;
my $charset = detect($string);
票数 5
EN

Stack Overflow用户

发布于 2013-12-23 13:48:06

您试过从http://perldoc.perl.org/Encode.html获得编码和文档吗?

票数 1
EN

Stack Overflow用户

发布于 2013-12-23 16:38:13

警告:您将Perl作为标记,这不是Perl解决方案。然而,它确实解释了如何快速地将文件从一种编码格式转换为另一种编码格式,甚至可能帮助您了解您的文件的编码方式。

iconv命令可以轻松地将文件从一种编码转换为另一种编码。假设一个文件是UTF-8格式的,您希望将它转换为ISO8859-1格式:

代码语言:javascript
复制
$ iconv -f utf8 -t latin1 $utf8_file > $latin1_file

您可以找到各种文件编码的列表,iconv可以通过使用-l参数来转换这些编码。iconv对于各种格式也有很多别名,所以无论您输入什么格式,您都肯定会得到正确的。例如,对于ISO-8859-1,列出的各种别名如下:

代码语言:javascript
复制
CP819 IBM819 ISO-8859-1 ISO-IR-100 ISO8859-1 ISO_8859-1 ISO_8859-1:1987 L1 LATIN1 CSISOLATIN1

当然,这并不能告诉您文件的原始编码实际上是什么。这就是file可以帮助你的地方。

我有一个名为text_utf.txt的UTF-8编码测试文件。

代码语言:javascript
复制
File encoding test:

â Õ ¼ ¥

现在,我将复制另一个编码为ISO-8859-1格式的文件:

代码语言:javascript
复制
$ iconv -f utf8 -t latin1 text_utf.txt > text_latin1.txt

如果我将这两个文件都交给file命令,它将告诉我它们的编码:

代码语言:javascript
复制
$ file test_*.txt
test_latin1.txt: ISO-8859 text
test_utf8.txt:   UTF-8 Unicode text

请注意,file命令可以输出编码类型,可能与iconv命令一起使用就足够了。

几个注意事项:并不是所有的编码转换都能工作。如果文件编码为utf-8格式,可以表示数百万个唯一字符,并且试图将其转换为ISO-8859-1这样的格式,只能表示最多255个字符,则情况尤其如此:

代码语言:javascript
复制
$ iconv -f utf8 -t mac test_utf8.txt  > test_macroman.text  # The ¼ isn't a MacRoman character
iconv: test_utf8.txt:3:4: cannot convert

另外,file命令只查看文件的前几个块,因此如果指定编码文件的字符被深埋在文件中,则file命令可能看不到它们。而且,file命令还可能混淆两种不同的编码。file可以很容易地判断一个文件是否为utf-8格式,但它可能无法判断一个文件是一个255个字节字符编码格式还是另一个字节字符编码格式。

这一切都很好,但我在Windows系统上,你这个白痴。

我怀疑,因为你想把文件从更通用的,Linux/Mac友好的UTF-8编码转换为ISO-8859-1,这类似于Windows代码页1252 --美国的标准Windows文件编码。

不过,您可能会发现fileiconv命令的组合是确定文件编码和将它们从一种编码转换到另一种编码的好方法。

如果您使用的是Windows,您可以下载西格温,这将为您提供在Linux系统上找到的所有标准GNU实用程序(包括完整的BASH )。每当我在Windows系统上时,我发现Cygwin很有用,并且需要做一些标准Windows的批处理脚本无法轻松完成的事情--比如将大量文件从一种格式转换为另一种格式。

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

https://stackoverflow.com/questions/20744838

复制
相关文章

相似问题

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