使用ReadList读取UTF-8文本文件

Sza*_*lcs 5 wolfram-mathematica

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

Import[..., CharacterEncoding -> "UTF8"]有效,但它比它慢了很多ReadList. $CharacterEncoding对...没有影响ReadList

在此处下载UTF-8编码文件样本.

要测试大输入的性能,请参阅此问题中的测试文件.


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

进口

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

Out[2]= {5.234, Null}
Run Code Online (Sandbox Code Playgroud)

海克

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

Out[4]= {4.328, Null}
Run Code Online (Sandbox Code Playgroud)

巫师先生

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

Out[5]= {2.281, Null}
Run Code Online (Sandbox Code Playgroud)

Hei*_*ike 6

这似乎有效

FromCharacterCode[ToCharacterCode[ReadList["raw.php.txt", Word]], "UTF-8"]
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

(* ==> {0.01784, Null} *)
Run Code Online (Sandbox Code Playgroud)


Mr.*_*ard 4

如果我省略Word,这有效:

$CharacterEncoding = "UTF-8";

ReadList["UTF8.txt"]
Run Code Online (Sandbox Code Playgroud)

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

请在更大的文件上尝试此操作并报告其性能:

FromCharacterCode[BinaryReadList["UTF8.txt"], "UTF-8"]
Run Code Online (Sandbox Code Playgroud)