【问题标题】:Reading UTF-8 text files with ReadList使用 ReadList 读取 UTF-8 文本文件
【发布时间】:2012-01-05 11:13:16
【问题描述】:

是否可以使用ReadList 来读取使用ReadList[..., Word] 的UTF-8(或任何其他)编码的文本文件,还是只能使用ASCII?如果它是纯 ASCII 码,是否有可能以良好的性能“修复”已读取数据的编码(即保留 ReadList 相对于 Import 的性能优势)?

Import[..., CharacterEncoding -> "UTF8"] 可以工作,但它比ReadList 慢很多。 $CharacterEncodingReadList 没有影响

Download a sample UTF-8 encoded file here.

要在大输入上测试性能,请参阅this question 中的测试文件。


以下是大型文本文件的答案时间安排:

导入

In[2]:= Timing[
 data = Import[file, "Text"];
 ]

Out[2]= {5.234, Null}

海克

In[4]:= Timing[
 data = ReadList[file, String];
 FromCharacterCode[ToCharacterCode[data], "UTF8"];
 ]

Out[4]= {4.328, Null}

先生。向导

In[5]:= Timing[
 string = FromCharacterCode[BinaryReadList[file], "UTF-8"];
 ]

Out[5]= {2.281, Null}

【问题讨论】:

  • 能否链接到我可以用来测试的 UTF-8 编码文件?
  • 我记得ToCharacterCode 本身就可以处理列表,所以我认为不需要Map。这会提高它的性能吗?

标签: wolfram-mathematica


【解决方案1】:

如果我遗漏了Word,这可行:

$CharacterEncoding = "UTF-8";

ReadList["UTF8.txt"]

然而这是失败的,因为数据不是作为字符串读取的。

请在更大的文件上试试这个并报告它的性能:

FromCharacterCode[BinaryReadList["UTF8.txt"], "UTF-8"]

【讨论】:

【解决方案2】:

这似乎有效

FromCharacterCode[ToCharacterCode[ReadList["raw.php.txt", Word]], "UTF-8"]

我得到的链接测试文件的时间是

FromCharacterCode[ToCharacterCode[ReadList["test.txt", Word]], "UTF-8"]); // Timing

(* ==> {0.000195, Null} *)

Import["test.txt", "Text"]; // Timing

(* ==> {0.01784, Null} *)

【讨论】:

  • 谢谢!事实上,To/FromCharacterCode 是关键! (请参阅其他答案和我对时间的编辑。)
  • @Szabolcs 和 Heike,我没有看到这个答案,即使我发布了我的更新!我什至不耐烦地刷新了页面,看看 Szabolcs 是否尝试过我的新答案。也许我是那么盲目,但这似乎是一个小故障。对不起,我踩到了任何脚趾。
  • 当我想到它时,我一直在使用脚本阻止程序 (NoScript)。我敢打赌它以某种方式干扰了页面更新。
猜你喜欢
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
相关资源
最近更新 更多