Как узнать, какой специальный символ есть в файле? - PullRequest
2 голосов
/ 21 апреля 2010

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

Я использовал библиотеку mozilla, чтобы угадать кодировку файла, и она говорит UTF-8.

Ответы [ 3 ]

4 голосов
/ 21 апреля 2010

Во-первых, если персонаж действительно «особенный» или нет, зависит от того, что вы называете «специальным персонажем».В качестве идентификатора в Unix и OS X вы можете использовать, например, команды od , file и hexdump для простого просмотра файлов:

... $  hexdump -C example.txt 
00000530  6f 77 73 20 61 63 74 69  6f 6e 2e 0a 0a 0a 0a     |ows action.....|

Теперь, если вы знаете, что кодировка вашего файла - UTF-8, это означает, что каждый байт, чей старший бит установлен в ноль, соответствует ровно одному символу (в приведенном выше примере последний байт равен «0a», что означает«0a» соответствует одному «символу»).

Файл в UTF-8 также означает, что каждый байт, старший бит которого установлен в 1, является частью многобайтового символа.Например, в следующей последовательности байтов:

75 20 5b e2 80 a6 5d 20  61 75 74 6f 72 69 73 61

единственными тремя байтами, для которых установлен их старший бит, является «e2 80 a6» (для всех значений от 0x80 до 0xFF установлен самый левый / старший бит)и они являются частью одного и того же символа (вы не можете иметь не-ASCII-символ в UTF-8, состоящий только из одного байта, чей старший бит установлен, следовательно, вы знаете, что эти три байта являются частью одного и того же символа ...тот факт, что каждый байт UTF-8, для которого установлен самый левый / старший бит, является ИМХО действительно прекрасной особенностью UTF-8).

Теперь вы Google на «e2 80 a6» и видите, что это символ Unicode с именем«горизонтальный многоточие» (чья кодовая точка в UTF-8 представлена ​​шестнадцатеричным e280a6).

Таким образом, в основном вам нужно сделать две вещи:

  • найти, какие байтысоставляют последний «специальный» символ (это один байт или несколько байтов?)

  • найти, какому «специальному символу» этот / эти байт (ы) соответствует

1 голос
/ 21 апреля 2010

В Unix вы можете использовать утилиту od для вывода нескольких представлений байтов в файле или потоке.

1 голос
/ 21 апреля 2010

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

Вот один, который я использовал в прошлом: http://www.hexworkshop.com/

...