powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Неверная кодировка текста
30 сообщений из 30, показаны все 2 страниц
Неверная кодировка текста
    #34991251
Подскажите пожалуйста, загружаю с инета html страницу, сохраняю её на диск. Потом Пытаюсь программно найти в ней слово, например "Ошибка", но при загрузке текста из файла, VB грузит его в непонятной кодировке, например "Ошибка авторизац" Как вернуть нужную кодировку???
P.S. так пишутся только русские слова, английский текст воспринимается нормально
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34991382
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверь это кодировка Юникод?
-----------
Андрей.
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34991406
Как?
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34991413
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открой эту страницу в IE и посмотри вид-кодировка
-----------
Андрей.
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34991414
Кстати, если открыть сохранённый документ блокнотом, то весь русский текст читабелен, а если через VB, то нет ((
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34991428
Да, Unicod UTF-8
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34991458
и как быть?
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34991501
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
strconv
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34991507
AndreyMpstrconv

а можно поподробнее....
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34991538
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.vbnet.ru/vbguide/showfunction.asp?id=34
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34991559
AndreyMphttp://www.vbnet.ru/vbguide/showfunction.asp?id=34

Спасибо, то что надо! ))
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34991735
Александр888 AndreyMphttp://www.vbnet.ru/vbguide/showfunction.asp?id=34

Спасибо, то что надо! ))

Рано я обрадовался (((
Короче, делаю сию процедуру:

Private Sub Command2_Click()
Open "data\login.htm" For Input As FileNum
Do Until EOF(FileNum)
Line Input #FileNum, txt
alltxt = alltxt + txt + vbCrLf
Loop
Close #FileNum
MsgBox StrConv(alltxt, vbFromUnicode)

End Sub



и получается вот что:
?????????•???????????????????????????????????????????????????????????????????????????
??•??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????


Что неправильно я делаю?
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34991974
HELP!!! Неужели никто не знает, как с этим справится??? ((
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34992063
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34992386
Спасибо, вещь хорошая, но можно ли этого добится средствами VB?
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34992431
НастенькаНет, так дело не пойдет. вот что нашла:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Enum idCodePage
    win =  1251 
    dos =  866 
    Koi =  20866 
    Iso =  28595 
    Utf =  65001 
End Enum

Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, _
        ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, _
        ByVal cchWideChar As Long) As Long
Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, _
        ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, _
        ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long

Public Function ConvertCodePage(SourseString As String, inPage As idCodePage, outPage As idCodePage) As String
  Dim LenSourseString As Long
  Dim strFirst As String
  Dim strSecond As String
  Dim RetStrLong As Long
  LenSourseString = Len(SourseString)
  strFirst = String(LenSourseString *  2 , Chr( 0 ))
  strSecond = String(LenSourseString *  2 , Chr( 0 ))
  RetStrLong = MultiByteToWideChar(inPage, &H1, SourseString, LenSourseString, StrPtr(strFirst), LenSourseString)
  RetStrLong = WideCharToMultiByte(outPage,  0 , StrPtr(strFirst), RetStrLong, strSecond, LenSourseString *  2 , ByVal  0 ,  0 )
  ConvertCodePage = Left(strSecond, RetStrLong)
End Function

вроде всё работает, но есть проблема, я заранее не знаю, какая будет кодировка - dos или win. если dos, то в win конвертирует нормально, а если win, то он win в win конвертирует неверное.
вопрос: а как заранее узнать кодировку файла?

Попытался использовать этот код, выскочило на функции MultiByteToWideChar:
---------------------------
Microsoft Visual Basic
---------------------------
Ошибка компиляции:

Constants, fixed-length strings, arrays, user-defined types and Declare statements not allowed as Public members of object modules
---------------------------
ОК Справка
---------------------------

как это исправить?
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34992559
Timekiller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно создать обычный модуль и объявить функцию\глобальные переменные там. Собственно об этом компилятор и пишет.
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34993159
знаю, это звучит глупо... но, не могли бы вы написать подробно, как это делать... Спасибо!
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34993871
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ух ты. Знакомая процедурка. :) Только вот с UTF может и не работать. К тому же у тебя видимо не UTF-8.
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34993912
А что тогда? Можешь помочь?
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34993947
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выложи свой файл посмотреть.
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34993987
Вот текст
Option Explicit

Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, _
ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Public Event ErrorDownload(FromPathName As String, ToPathName As String)
Public Event DownloadComplete(FromPathName As String, ToPathName As String)

Public Function DownloadFile(FromPathName As String, ToPathName As String)
If URLDownloadToFile(0, FromPathName, ToPathName, 0, 0) = 0 Then
DownloadFile = True
RaiseEvent DownloadComplete(FromPathName, ToPathName)
Else
DownloadFile = False
RaiseEvent ErrorDownload(FromPathName, ToPathName)
End If
End Function

Private Sub Form_Load()
FileNum = FreeFile
nomber = 0
nomber_data = 0
stringnomber = 0
string2 = 0
End Sub

Private Sub Command1_Click()
Call login
End Sub

Sub login()
Call DownloadFile("http://civil.wab.ru/game.php", "data\enter.htm")
temp = "data\enter.htm"
Call text_load(temp)
End Sub

Sub text_load(path As String)
Open path For Input As FileNum
Do Until EOF(FileNum)
Line Input #FileNum, txt
table_txt(nomber) = txt
alltxt = alltxt + txt
Loop
Close #FileNum
MsgBox alltxt
End Sub

Вот так я загружаю текст...
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34994054
А вот так пытаюсь поменять кодировку
Dim FileNum As Integer
Dim txt As String
Dim alltxt As String

Enum idCodePage
Win = 1251
Dos = 866
Koi = 20866
Iso = 28595
Utf = 65001
End Enum

Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, _
ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long) As Long
Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long,
_
ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, _
ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long

Public Function ConvertCodePage(SourseString As String, inPage As idCodePage, outPage As idCodePage) As String
Dim LenSourseString As Long
Dim strFirst As String
Dim strSecond As String
Dim RetStrLong As Long
LenSourseString = Len(SourseString)
strFirst = String(LenSourseString * 2, Chr(0))
strSecond = String(LenSourseString * 2, Chr(0))
RetStrLong = MultiByteToWideChar(inPage, &H1, SourseString, LenSourseString, StrPtr(strFirst), LenSourseString)
RetStrLong = WideCharToMultiByte(outPage, 0, StrPtr(strFirst), RetStrLong, strSecond, LenSourseString * 2, ByVal 0, 0)
ConvertCodePage = Left(strSecond, RetStrLong)
End Function



Private Sub Command1_Click()
Open "data\login.htm" For Input As FileNum
Do Until EOF(FileNum)
Line Input #FileNum, txt
alltxt = alltxt + txt
Loop
Close #FileNum
Dim strWin As String
Dim strUtf As String
Dim fsoSave As New FileSystemObject
Dim filSave As TextStream
Set filSave = fsoSave.CreateTextFile("temp.txt", True)
strWin = alltxt
strUtf = ConvertCodePage(strWin, Win, Utf)
filSave.WriteLine (strUtf)
filSave.Close
Call ConvertCodePage(alltxt, Utf, Win)
MsgBox alltxt
End Sub
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34994381
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр888Спасибо, вещь хорошая, но можно ли этого добится средствами VB?
запуск из VB примерно так
Код: plaintext
Shell "C:\xcode.exe C:\data\enter.htm C:\data\enter2.txt"
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34994411
запуск из VB примерно так
Код: plaintext
Shell "C:\xcode.exe C:\data\enter.htm C:\data\enter2.txt"
[/quot]

не работает. т.е. запускается, но кодировку не исправляет ))) сплошные ?????????????????????
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34994441
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не заходит у меня на http://civil.wab.ru/. Поэтому и кодировку не могу посмотреть. Выложи свою скачанную страничку.
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34994471
AndreyMpНе заходит у меня на http://civil.wab.ru/. Поэтому и кодировку не могу посмотреть. Выложи свою скачанную страничку.

Вот...
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34994557
там не полностью, вот полная...
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34995049
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подкоректируй и попробуй так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Declare Function MultiByteToWideChar Lib "kernel32" _
(ByVal CodePage As Long, ByVal dwFlags As Long, _
ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, _
ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long

Const CP_UTF8 =  65001 

Dim sOut As String, sIn As String, OutLength As Long
sIn = "%D0%A1%D1%82%D1%80%D0%BE%D0%BA%D0%B0"
sOut = sIn
OutLength =  0 
Dim i&, Char As Byte, CharPercent As Byte
CharPercent = Asc("%")
For i =  1  To Len(sIn)
Char = Asc(Mid$(sIn, i,  1 ))
If Char = CharPercent Then
Char = CByte("&H" & Mid$(sIn, i +  1 ,  2 ))
i = i +  2 
End If
OutLength = OutLength +  1 
Mid$(sOut, OutLength,  1 ) = Chr$(Char)
Next i
sOut = Left$(sOut, OutLength)

Dim s As String
s = sOut
s = Left$(s, MultiByteToWideChar(CP_UTF8,  0 , sOut, - 1 , StrPtr(s), LenB(s)))
MsgBox s
-----------
Андрей.
...
Рейтинг: 0 / 0
Неверная кодировка текста
    #34995361
BelkinПодкоректируй и попробуй так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Declare Function MultiByteToWideChar Lib "kernel32" _
(ByVal CodePage As Long, ByVal dwFlags As Long, _
ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, _
ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long

Const CP_UTF8 =  65001 

Dim sOut As String, sIn As String, OutLength As Long
sIn = "%D0%A1%D1%82%D1%80%D0%BE%D0%BA%D0%B0"
sOut = sIn
OutLength =  0 
Dim i&, Char As Byte, CharPercent As Byte
CharPercent = Asc("%")
For i =  1  To Len(sIn)
Char = Asc(Mid$(sIn, i,  1 ))
If Char = CharPercent Then
Char = CByte("&H" & Mid$(sIn, i +  1 ,  2 ))
i = i +  2 
End If
OutLength = OutLength +  1 
Mid$(sOut, OutLength,  1 ) = Chr$(Char)
Next i
sOut = Left$(sOut, OutLength)

Dim s As String
s = sOut
s = Left$(s, MultiByteToWideChar(CP_UTF8,  0 , sOut, - 1 , StrPtr(s), LenB(s)))
MsgBox s
-----------
Андрей.

Вот это работает как по маслу!!!!!!! Спасибо большое всем, кто откликнулся !!!
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Неверная кодировка текста
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]