Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Читаю из текстового файла мусор вместо кириллицы (open... input...)

4 views
Skip to first unread message

Войтулевич Валентин

unread,
Sep 22, 2007, 7:37:30 AM9/22/07
to
Open "settings.xml" For Input As #ffile

strFileSpr = Input(LOF(ffile), #ffile)

В результате латинские символы читаются нормально, а кириллица -
кракозяблами. :(
Интересно что соседний файл в том-же каталоге (тоже XML) читается тем же
способом без проблем.
И еще одно.
В строке куда загоняется содержимое файла, вначале (до первого тега) тоже
идут кракозяблы, хотя при открытии того же файла блокнотом их просто нет!
И последнее.
Если скопировать содержимое файла (Ctrl+C), потом создать новый файл
текстовый и сохранить в него скопированное (а файл переименовать в XML), то
этот замененный файл открывается без проблем (никаких кракозяблов на месте
кириллицы, а все как надо видно).

Но начальный файл откуда я всё читаю мне трогать нельзя - он создается
другой программой.
Что это может быть за чертовщина?
Как прочесть из файла содержимое в том-же виде, в котором оно отображается в
стандартном блокноте?
Почему блокнот показывает всё, а при чтениии программно - кракозяблы (именно
из этого файла, а соседний такой же читается нормально всеми способами)?
Помогите кто может плз.

Войтулевич Валентин

unread,
Sep 26, 2007, 8:23:41 AM9/26/07
to
Решил проблему сам :) следующим образом (перекодировка строки из UTF-8 в
Win):

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Function ConvertUTF8ToWin(ByVal strUTF8 As String) As String
Dim strWin As String, mumChr As Integer, oneChr As String * 1, lngLenStr As
Long, posI As Long
lngLenStr = Len(strUTF8)
posI = 0
While posI < lngLenStr
posI = posI + 1
oneChr = Mid(strUTF8, posI, 1)
mumChr = Asc(oneChr)
If (mumChr >= 192) And (mumChr <= 255) Then
mumChr = ConvertDec(Hex(Asc(Mid(strUTF8, posI + 1, 1)))) +
((ConvertDec(Hex(mumChr)) - 208) * 64)
mumChr = mumChr + 48
If mumChr = 257 Then mumChr = 184
If mumChr = 177 Then mumChr = 168
oneChr = Chr(mumChr)
strWin = strWin & oneChr
posI = posI + 1
Else
strWin = strWin & oneChr
End If
Wend
ConvertUTF8ToWin = strWin
End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function ConvertDec(heximal) As Long
Dim Simvol As String
Dim DesChislo As Long
Dim x As Long
ConvertDec = 0
For x = 1 To Len(heximal)
Simvol = Mid(heximal, x, 1)
If UCase(Simvol) = "A" Then
DesChislo = 10
ElseIf UCase(Simvol) = "B" Then
DesChislo = 11
ElseIf UCase(Simvol) = "C" Then
DesChislo = 12
ElseIf UCase(Simvol) = "D" Then
DesChislo = 13
ElseIf UCase(Simvol) = "E" Then
DesChislo = 14
ElseIf UCase(Simvol) = "F" Then
DesChislo = 15
Else
DesChislo = Val(Simvol)
End If
ConvertDec = ConvertDec + DesChislo * 16 ^ (Len(heximal) - x)
Next x
End Function
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


"Войтулевич Валентин" <annusd...@yandex.ru> сообщил/сообщила в новостях
следующее: news:ewSS8zQ$HHA....@TK2MSFTNGP02.phx.gbl...

0 new messages