Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Как разобраться с кодировкой? Добавлено: 15.08.08 01:58  

Автор вопроса:  Marki
Здравствуйте всем!

Имеется некий файл, который необходимо прочитать. Проблема в том, что файл может быть записан в DOS-кодировке, и при его чтении, соответственно, "глаза ломаются от увиденного".

Вопрос, собственно, в том, каким образом определить кодировку у считанного текста и преобразовать в читаемый вид (если такое преобразование необходимо).

Всем спасибо.

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 15.08.08 07:53
Частотным анализом.

Ответить

Номер ответа: 2
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #2
Добавлено: 15.08.08 12:28
+1

Ответить

Номер ответа: 3
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #3
Добавлено: 15.08.08 17:21
Как вариант можно поискать стоящие рядом символы из интервала chr(160)...chr(175), если такие пары есть, то файл скорее всего досовский.

Ответить

Номер ответа: 4
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #4 Добавлено: 15.08.08 17:31
Public Class Convertions


    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


далее тему можно развить

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам