В Ruby, как надежно определить кодировку файла (включая UTF-16 без спецификации)? - PullRequest
0 голосов
/ 20 февраля 2019

Мне нужно определить тип файла и кодировку в Ruby.

В настоящее время я использую libmagic через гем magic , но у него есть одна проблема: он не обнаруживает UTF-16 файлов, если у них нет спецификации. Этот является примером такого файла.

$ file -i text_without_bom.txt
text_without_bom.txt: application/octet-stream; charset=binary

Есть ли какая-либо другая библиотека или метод, который я мог бы использовать для правильного определения файлов UTF-16?

PS Такжепробовал rchardet и charlock_holmes , без особой удачи.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Невозможно надежно определить кодировку текстового файла.Вам нужно внеполосно сообщить, что такое кодировка.

Причина этого проста: существует множество 8-битных кодировок.В этих кодировках каждая комбинация из 8 битов является допустимым символом.Поскольку каждая комбинация из 8 битов является допустимым символом в каждой 8-битной кодировке, любой произвольный текстовый файл, и фактически любой произвольный файл вообще является действительным текстовым файлом в любая 8-битная кодировка.

Например, в ISO 8859-15 0xA4 - знак евро .В ISO 8859-1, CP1252 и Unicode 0xA4 - это международный знак валюты ¤.Итак, если у вас есть файл, который содержит 0xA4, вы не можете знать, является ли это ISO 8859-15, ISO 8859-1, CP1252, одна половина символа в UTF-16, одна четверть символа в UTF-32середина многобайтовой последовательности в UTF-8 или одна из многих других возможностей.

0 голосов
/ 20 февраля 2019

Вы всегда можете отключить спецификацию и обработать файл без нее. Это описывает, как это можно сделать.

...