Страница: 1 |
Страница: 1 |
Вопрос: Как разобраться с кодировкой?
Добавлено: 15.08.08 01:58
Автор вопроса: Marki
Здравствуйте всем!
Имеется некий файл, который необходимо прочитать. Проблема в том, что файл может быть записан в DOS-кодировке, и при его чтении, соответственно, "глаза ломаются от увиденного".
Вопрос, собственно, в том, каким образом определить кодировку у считанного текста и преобразовать в читаемый вид (если такое преобразование необходимо).
Всем спасибо.
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #1
Добавлено: 15.08.08 07:53
Частотным анализом.
Номер ответа: 2
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #2
Добавлено: 15.08.08 12:28
+1
Номер ответа: 3
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #3
Добавлено: 15.08.08 17:21
Как вариант можно поискать стоящие рядом символы из интервала chr(160)...chr(175), если такие пары есть, то файл скорее всего досовский.
Номер ответа: 4
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #4
Добавлено: 15.08.08 17:31
Private Shared Encodings As System.Text.Encoding()
Shared Sub New()
Encodings = New System.Text.Encoding() { _
System.Text.Encoding.GetEncoding(1251), _
System.Text.Encoding.GetEncoding("koi8-R", _
System.Text.Encoding.UTF8, _
System.Text.Encoding.Unicode _
}
End Sub
Public Shared Function GetRussianText(ByVal sourceData As Byte()) As String
Return GetRussianText(sourceData, Nothing)
End Function
Public Shared Function GetRussianText(ByVal sourceData As Byte(), ByRef Encoding As Text.Encoding) As String
Dim Counts = New Integer(Encodings.Length - 1) {}
Dim Texts = New String(Encodings.Length - 1) {}
For i = 0 To Encodings.Length - 1
Dim Text = Encodings(i).GetString(sourceData)
Texts(i) = Text
Dim Count = 0
For Each C In Text
If C = "а"c OrElse C = "А"c OrElse C = "о" OrElse C = "О" Then
Count += 1
End If
Next
Counts(i) = Count
Next
Dim Max = Counts.Max
Dim MaxPos = Array.IndexOf(Counts, Max)
Encoding = Encodings(MaxPos)
Return Texts(MaxPos)
End Function
End Class
далее тему можно развить