Как определить кодировку текста? - PullRequest
3 голосов
/ 04 февраля 2012

У меня есть текст с диакритическими знаками, которые отображаются плохо, например: ¤ или ˇ или ˘. Я не знаю, какой кодировкой был текст. Есть ли простой способ выяснить это? Было бы неплохо, если бы был какой-нибудь онлайн-детектор кодировок или, возможно, просмотрщик конверсий кодировок? Я думаю о приложении, которое показывало бы мне, как некоторые конкретные диакритические знаки выглядят искаженными во всех доступных кодировках, так что я бы смог отследить то, которое соответствует символам, которые есть в тексте.

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 04 февраля 2012

В Windows PowerShell:

$bytes = [IO.File]::ReadAllBytes('some file.txt')
[Text.Encoding]::GetEncodings() |
  %{
    $_|Add-Member -pass Noteproperty Text ($_.GetEncoding().GetString($bytes))
  } | fl Name,Codepage,Text

Настройте путь к файлу и просматривайте результаты, пока не увидите что-то, что выглядит правильно; -)

Это просто перебирает все кодировки, которыеизвестна .NET и преобразует текст в строку с использованием соответствующей кодировки.

1 голос
/ 04 февраля 2012

В C #:

foreach (EncodingInfo encodingInfo in Encoding.GetEncodings())
    using (FileStream fileStream = File.OpenRead(filePath))
    using (StreamReader reader = new StreamReader(fileStream, encodingInfo.GetEncoding(), false))
        textBox1.Text += encodingInfo.DisplayName + ":\t " + reader.ReadToEnd() + "\r\n";

, где textBox1 - большая многострочная TextBox (или любой другой подходящий элемент управления).

Некоторые замечания, которые я выучил:

  1. Консольные приложения не поддерживают Unicode по умолчанию.
  2. File.ReadAllText пытается автоматически определить кодировку файла на основе наличия меток порядка байтов, даже если явно указана другая кодировка. Единственный способ подавить это - перегрузка конструктора StreamReader, которая позволяет подавить поиск меток порядка байтов.
...