Чтение текстовых файлов UTF-8 с помощью ReadList - PullRequest
5 голосов
/ 24 ноября 2011

Можно ли использовать ReadList для чтения кодированных в UTF-8 (или любых других) текстовых файлов, используя ReadList[..., Word], или это только ASCII?Если это только ASCII, можно ли "исправить" кодирование уже прочитанных данных с хорошей производительностью (то есть, сохранить преимущества производительности ReadList над Import)?

Import[..., CharacterEncoding -> "UTF8"] работает, но это немного медленнее, чем ReadList.$CharacterEncoding не влияет на ReadList

Загрузите образец файла в кодировке UTF-8 здесь.

Для тестирования производительности на большом входе см.файл теста в этот вопрос .


Ниже приведены временные характеристики ответов в текстовом файле большого размера:

Импорт

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

Out[2]= {5.234, Null}

Heike

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

Out[4]= {4.328, Null}

Mr.Волшебник

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

Out[5]= {2.281, Null}

Ответы [ 2 ]

6 голосов
/ 24 ноября 2011

Это похоже на работу

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} *)
4 голосов
/ 24 ноября 2011

Если я опускаю Word, это работает:

$CharacterEncoding = "UTF-8";

ReadList["UTF8.txt"]

Это, однако, ошибка, потому что данные не читаются как строки.

Пожалуйста, попробуйте это на большом файле и сообщите о его производительности:

FromCharacterCode[BinaryReadList["UTF8.txt"], "UTF-8"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...