Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Кривая кодировка на ASP - сервере / 5 сообщений из 5, страница 1 из 1
14.03.2005, 18:20
    #32959528
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривая кодировка на ASP - сервере
В клиенте пишу:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim objHTTP As New MSXML2.XMLHTTP
    With objHTTP
        .open "POST", HOST & "Default.asp?Action=" & Action, False
        .setRequestHeader "Content-Type", "text/html; charset=windows-1251"
        .setRequestHeader "Accept-Language", "ru, en"
        .setRequestHeader "Accept-Charset", "windows-1251;q=1"
        .setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
        .send s
    End With


На сервере:
Код: plaintext
1.
2.
3.
4.
5.
Dim s As String
Dim r() As Byte
        r() = Reqest.BinaryRead(Request.TotalBytes)
        s = StrConv(r, vbUnicode)
        Debug.Print s

И все равно "тест" выглядит как "тест". Как это лечится?
...
Рейтинг: 0 / 0
14.03.2005, 18:35
    #32959552
Serg****
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривая кодировка на ASP - сервере
Может это поможет
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
//    Задаём культуру "ru-RU" для текущего потока запроса пользователя 
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ru-RU");

//    Задаём культуру "ru-RU", используемую ResourceManager  для поиска 
// локализованных ресурсов
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("ru-RU");

//    Задаём кодировку контента ответа на запрос пользователя
this.Response.ContentEncoding = Encoding.GetEncoding Thread.CurrentThread.CurrentCulture.TextInfo.ANSICodePage);         
...
Рейтинг: 0 / 0
14.03.2005, 18:37
    #32959561
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривая кодировка на ASP - сервере
Забыл упомянуть, использую обычный VB6.
...
Рейтинг: 0 / 0
15.03.2005, 14:13
    #32960867
Va1entin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривая кодировка на ASP - сервере
А почему на сервере параметр кодировки vbUnicode?

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
17.03.2005, 12:12
    #32965516
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кривая кодировка на ASP - сервере
2 Va1entin: А как его поменять?

Пошарил по интеренту, народ часто натыкался на эту особенность vb+iis. Решается это только в рамках платформы .NET, как описал Serg****.
Пришлось написать свою процедуру перекодировки, может еще кому пригодится... Функция принимает произвольные строки, не только целиком юникодовые.

Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
Public Function Decode(UnicodeString As String) As String
Dim x As Long, y As Long
Dim i As Long, j As Long
Dim b_in() As Byte
Dim b_buff() As Byte
Dim s_out As String
    b_in = StrConv(UnicodeString, vbFromUnicode)
    x =  0 
    i =  1 
    s_out = ""
    While x <= Len(us) -  1 
        If b_in(x) =  208  Or b_in(x) =  209  Then
            s_out = s_out & Mid(us, i, x - i +  1 )
            i = x
            Do While b_in(x) =  208  Or b_in(x) =  209 
                x = x +  2 
                If x > UBound(b_in) Then Exit Do
            Loop
            j = x -  2 
            b_buff = StrConv(Mid(us, i +  1 , j - i +  2 ), vbFromUnicode)
            s_out = s_out & ConvPureUnic(b_buff)
            i = x +  1 
        End If
        x = x +  1 
    Wend
    Decode = s_out & Mid(us, i, x)
    Exit Function
errh:
    Decode = s_out
End Function

Private Function ConvPureUnic(b_in) As String
Dim c1 As Byte, c2 As Byte
Dim b_out() As Byte
Dim x As Long
Dim s As String
    ReDim b_out(UBound(b_in) /  2 )
    For x =  0  To UBound(b_in) Step  2 
        c1 = b_in(x)
        c2 = b_in(x +  1 )
        If c1 =  208  Then
            If c2 =  129  Then
                b_out(x /  2 ) =  168 
            Else
                b_out(x /  2 ) = c2 +  48 
            End If
        Else
            If c2 =  145  Then
                b_out(x /  2 ) =  184 
            Else
                b_out(x /  2 ) = c2 +  112 
            End If
        End If
    Next x
    s = StrConv(b_out, vbUnicode)
    If Asc(Right(s,  1 )) =  0  Then
        ConvPureUnic = Left(s, Len(s) -  1 )
    Else
        ConvPureUnic = s
    End If
End Function
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Кривая кодировка на ASP - сервере / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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