Казахские "умляуты"

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Казахские "умляуты"

Сообщение trash » 10.06.2009 (Ср) 15:00

Делаю многоязычную веб-систему на базе ISAPI и столкнулся с проблемой. В базе текст хранится в виде юникода в поле nvarchar, поэтому всякие ғқұә в запросах отдаются корректно. Какое-то время и в Response.Write они отдавались корректно (что было удивительно, ведь VB6 не работает с юникодом), а потом перестали. Причем и на казахском сервере и на сервере разработки и во всех версиях приложения. Теперь чешем репу, почему сначала работало? Почему перестало?

Что можно сделать для починки сего безобразия?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Казахские "умляуты"

Сообщение alibek » 10.06.2009 (Ср) 16:09

trash писал(а):(что было удивительно, ведь VB6 не работает с юникодом)

Это не удивительно, потому что VB6 работает с юникодом.
Перестало работать скорее всего после обновления драйверов ODBC или изменения настроек.
Lasciate ogni speranza, voi ch'entrate.

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Казахские "умляуты"

Сообщение trash » 10.06.2009 (Ср) 16:43

Ну да, это его контролы не работают. Насчет драйверов и прочего маловероятно. Чтобы одновременно на всех машинах и разных операционках?
Вспомнил, что рабочесть тестировали на вводе-выводе данных из веб-формы, а из веб-формы в поле юникоды попадают в виде &#xxxx;.

Сделал простой тест:
Код: Выделить всё
<%
set cn = server.createobject("adodb.connection")
cn.open "provider=sqlncli;server=xxx;database=yyy"
set rs=cn.execute("select * from Table1 where id=6")
response.write rs("Field1")
%>
Получаю Ба?да, а не Бағда.
Не IIS ли это случайно глючит с юникодом? Юникодные *.asp он не читает.
UPD: не читает пятый, шестой от этого излечился.
Последний раз редактировалось trash 11.06.2009 (Чт) 12:30, всего редактировалось 1 раз.

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Казахские "умляуты"

Сообщение trash » 11.06.2009 (Чт) 12:29

RTFM х Nчасов = UTF-8
А так же:
Код: Выделить всё
Public Function ConvertCP(strSrc As String, nFromCP As Charset, nToCP As Charset) As String
On Error Resume Next
Dim nLen As Long
Dim strDst As String
Dim strRet As String
Dim nRet As Long
    nLen = Len(strSrc)
    strDst = String(nLen * 2, Chr(0))
    strRet = String(nLen * 2, Chr(0))
    nRet = MultiByteToWideChar(nFromCP, &H1, strSrc, nLen, strDst, nLen)
    nRet = WideCharToMultiByte(nToCP, 0, strDst, nRet, strRet, nLen * 2, ByVal 0, 0)
    ConvertCP = Left$(strRet, nRet)
End Function
Которая не конвертирует default в 65001

Код: Выделить всё
Function EncodeUTF8(ByVal sInput As String) As String
Dim iCharPos As Long, iCharCode As Long
Dim iLoByteCounter As Long, iLoByteCount As Long, iHiBytePrefix As Long
Dim iInputLen As Long
    iInputLen = Len(sInput)
    ReDim aUTF8(iInputLen)
    For iCharPos = 1 To iInputLen
        aUTF8(iCharPos) = Mid$(sInput, iCharPos, 1)
        iCharCode = AscW(aUTF8(iCharPos))
        If (iCharCode > &H7F) Then '0xxx xxxx
            If (iCharCode < &H800) Then
                iHiBytePrefix = 192 '110xxxxx prefix for 2 bytes unicode
                iLoByteCount = 1
            ElseIf (iCharCode < &H10000) Then
                iHiBytePrefix = 224 '1110xxxx prefix for 3 bytes unicode
                iLoByteCount = 2
            ElseIf (iCharCode < &H200000) Then
                iHiBytePrefix = 240 '11110xxx prefix for 4 bytes unicode
                iLoByteCount = 3
            ElseIf (iCharCode < &H4000000) Then
                iHiBytePrefix = 248 '111110xx prefix for 5 bytes unicode
                iLoByteCount = 4
            Else
                iHiBytePrefix = 252 '1111110x prefix for 6 bytes unicode
                iLoByteCount = 5
            End If
            aUTF8(iCharPos) = ""
            For iLoByteCounter = iLoByteCount To 1 Step -1
                '6 ìëàäøèõ áèòîâ îò iCharCode + ïðåôèêñ 10xxxxxx
                aUTF8(iCharPos) = Chr(128 Or iCharCode And 63) & aUTF8(iCharPos)
                iCharCode = iCharCode \ 64 'ñäâèã íà 6 áèòîâ âïðàâî
            Next
            aUTF8(iCharPos) = Chr(iHiBytePrefix Or iCharCode) & aUTF8(iCharPos)
        End If
    Next
    EncodeUTF8 = Join(aUTF8, "")
End Function

Function DecodeUTF8(sInput As String) As String
Dim iCharPos As Long, iCharCode As Long
Dim iLoByteCounter As Long, iLoByteCount As Long, iLoCharCode As Long
Dim iInputLen As Long
    iInputLen = Len(sInput)
    ReDim aUnicode(iInputLen)
    For iCharPos = 1 To iInputLen
        aUnicode(iCharPos) = Mid$(sInput, iCharPos, 1)
        iCharCode = Asc(aUnicode(iCharPos))
        If (iCharCode > 191) Then
            If (iCharCode < 224) Then '110xxxxx prefix for 2 bytes unicode
                iCharCode = iCharCode And 31 'remove the 3 bit two bytes prefix
                iLoByteCount = 1
            ElseIf (iCharCode < 240) Then '1110xxxx prefix for 3 bytes unicode
                iCharCode = iCharCode And 15 'remove the 4 bit three bytes prefix
                iLoByteCount = 2
            ElseIf (iCharCode < 248) Then '11110xxx prefix for 4 bytes unicode
                iCharCode = iCharCode And 7 'remove the 5 bit four bytes prefix
                iLoByteCount = 3
            ElseIf (iCharCode < 252) Then '111110xx prefix for 5 bytes unicode
                iCharCode = iCharCode And 3 'remove the 6 bit five bytes prefix
                iLoByteCount = 4
            Else '1111110x prefix for 6 bytes unicode
                iCharCode = iCharCode And 1 'remove the 7 bit six bytes prefix
                iLoByteCount = 5
            End If
            For iLoByteCounter = 1 To iLoByteCount
                iLoCharCode = Asc(Mid$(sInput, iCharPos + iLoByteCounter, 1)) 'the next byte
                'ñäâèã âëåâî íà 6 áèòîâ + 6 ìëàäøèõ áèòîâ ñëåäóþùåãî ñèìâîëà
                iCharCode = iCharCode * 64 + (iLoCharCode And 63)
            Next
            aUnicode(iCharPos) = ChrW(iCharCode)
            iCharPos = iCharPos + iLoByteCount
        End If
    Next
    DecodeUTF8 = Join(aUnicode, "")
End Function
Которые работают прекрасно, но вызывают сомнения в плане производительности.

Может таки есть волшебный способ вызвать MultiByteToWideChar/WideCharToMultiByte чтобы конвертировать аналогично Encode/DecodeUTF8?

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Казахские "умляуты"

Сообщение trash » 15.06.2009 (Пн) 9:18

Так что, ни у кого нет идей?

Это не удивительно, потому что VB6 работает с юникодом.
Вынужден заметить, что эта фраза не соответствует действительности. Работать, в моем понимании в данном случае, это получать ожидаемый результат после конкретных действий. Поле, например действий LСase или Ucase, получается лажа, потому что они не считают, что строки бывают юникодными. Так что VB6 с юникодом не работает, а халтурит.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Казахские "умляуты"

Сообщение alibek » 15.06.2009 (Пн) 10:32

trash писал(а):Поле, например действий LСase или Ucase, получается лажа, потому что они не считают, что строки бывают юникодными.

Конкретный пример покажи.
Lasciate ogni speranza, voi ch'entrate.

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Казахские "умляуты"

Сообщение trash » 15.06.2009 (Пн) 12:32

Ты мне не веришь на слово? :))
Код: Выделить всё
    With New Scripting.FileSystemObject
        With .OpenTextFile("F:\in.htm")
            s = .ReadAll
        End With
        With .OpenTextFile("F:\out.htm", ForWriting, True)
            .Write LCase(s)
        End With
    End With


Срока Сабитова Рљ.Р•. аккуратно превращается в рўр°р±рёс‚рѕрір° рљ.р•., а не В результате html выглядит аналогично: рўр°р±рёс‚рѕрір° рљ.р•. А должно быть Сабитова К.Е. Данная проблема решена архитектурно, а меня больше интересует
MultiByteToWideChar/WideCharToMultiByte.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Казахские "умляуты"

Сообщение alibek » 15.06.2009 (Пн) 12:45

Ты видимо путаешь UTF и Unicode.
Lasciate ogni speranza, voi ch'entrate.

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Казахские "умляуты"

Сообщение trash » 15.06.2009 (Пн) 13:04

VS.NET в Advanced Save Options почему-то их не противопоставляет — Unicode (UTF-8 without signature) - Codepage 65001.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Казахские "умляуты"

Сообщение alibek » 15.06.2009 (Пн) 13:17

Потому что UTF-8 это одна из разновидностей (представлений) Unicode.
В VB юникод, использующий по два байта на символ, это UTF-16.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Казахские "умляуты"

Сообщение Andrey Fedorov » 15.06.2009 (Пн) 13:29

trash писал(а):что было удивительно, ведь VB6 не работает с юникодом


Чего ради не работает? Вот контролам нужный Charset указывать нужно, да и не все при этом корректно его держат. Потому под родной кодовой страницей писать можно без проблем, а вот под чужой можно найти себе геморрой... Потому если писать что-то серьезное и многоязычное, то лучше сразу сползать на NET...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Казахские "умляуты"

Сообщение trash » 15.06.2009 (Пн) 13:53

Называйте как хотите, но меня язык не поворачивается назвать это словом "работает". Эту тему закроем.

И все-таки, как конвертировать win1251 в UTF-8 с помощью api? Или это невозможно в принципе?

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Казахские "умляуты"

Сообщение arthur2 » 15.06.2009 (Пн) 14:22

trash писал(а):Называйте как хотите, но меня язык не поворачивается назвать это словом "работает"


Да нормально он работает с уникодом - практически без проблем. Другое дело, что его стандартные контролы уникод не поддерживают, но это решаемо, если всякие эдиты создавать самому. Глянь эти темы:
viewtopic.php?f=1&t=36270
http://forum.sources.ru/index.php?showtopic=230972&hl=

trash писал(а):И все-таки, как конвертировать win1251 в UTF-8 с помощью api? Или это невозможно в принципе?

viewtopic.php?f=1&t=36244&start=0&st=0&sk=t&sd=a
Артур
 
   

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Казахские "умляуты"

Сообщение iGrok » 15.06.2009 (Пн) 14:27

trash писал(а):И все-таки, как конвертировать win1251 в UTF-8 с помощью api? Или это невозможно в принципе?

http://www.google.com/search?q=utf8+decode+vb6

Первая строка гугля, однако...
http://www.nonhostile.com/howto-convert ... ng-vb6.asp
label:
cli
jmp label

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Казахские "умляуты"

Сообщение trash » 15.06.2009 (Пн) 16:24

Первая строка гугля, однако...
Ключевое слово api, однако.

arthur2, спасибо за ссылку, буду смотреть.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Казахские "умляуты"

Сообщение alibek » 15.06.2009 (Пн) 21:02

А чем тебе ADODB не API?
Если же тебе нужно именно Flat WinAPI, то покопайся в документации тщательнее, ADODB.Stream.Charset наверняка использует MultiByteToWideChar/WideCharToMultiByte, надо только правильные кодовые таблицы использовать.
Lasciate ogni speranza, voi ch'entrate.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Казахские "умляуты"

Сообщение arthur2 » 16.06.2009 (Вт) 9:26

alibek писал(а):ADODB.Stream.Charset наверняка использует MultiByteToWideChar/WideCharToMultiByte, надо только правильные кодовые таблицы использовать.

А раз всё равно, то почему бы не использовать MultiByteToWideChar/WideCharToMultiByte напрямую?
Артур
 
   

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Казахские "умляуты"

Сообщение iGrok » 16.06.2009 (Вт) 11:53

arthur2 писал(а):
alibek писал(а):ADODB.Stream.Charset наверняка использует MultiByteToWideChar/WideCharToMultiByte, надо только правильные кодовые таблицы использовать.

А раз всё равно, то почему бы не использовать MultiByteToWideChar/WideCharToMultiByte напрямую?

Да не почему. Просто работающий без доработки напильником вариант с Stream ищется за 5 секунд в гугле, а на MB<->WC надо время тратить.
Если оно есть - тогда конечно можно.
label:
cli
jmp label

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Казахские "умляуты"

Сообщение arthur2 » 16.06.2009 (Вт) 13:51

arthur2 писал(а):Если оно есть - тогда конечно можно.
Оно есть - по моей ссылке :)
Артур
 
   

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Казахские "умляуты"

Сообщение iGrok » 16.06.2009 (Вт) 13:59

arthur2 писал(а):
arthur2 писал(а):Если оно есть - тогда конечно можно.
Оно есть - по моей ссылке :)

offtop: По твоей ссылке есть время? )))
label:
cli
jmp label

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Казахские "умляуты"

Сообщение arthur2 » 16.06.2009 (Вт) 14:23

[оффтоп]Ага :) В том смысле, что его так же не надо тратить - решение, как и с Stream, уже готовое [/оффтоп]
Кстати, чтобы опробовать код по твоей ссылке, я всё-таки чуточку повозился - добавлял в референцы Data Objects :) Не люблю лишних референцев в проекте, если они не особо нужны
Артур
 
   

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Казахские "умляуты"

Сообщение trash » 17.06.2009 (Ср) 10:30

alibek писал(а):А чем тебе ADODB не API?

Код: Выделить всё
Sub main()
Const zzz = "вапваыпвапвапвыапвп"
Dim b() As Byte
Dim s As String
Dim s1 As String
Dim x As Long
Dim t
    s = EncodeUTF8(zzz)
    b = ConvertStringToUtf8Bytes(zzz)
   
    t = Now
    For x = 1 To 100000
        s1 = ConvertUtf8BytesToString(b)
    Next
    Debug.Print "ADODB.Stream", Now - t
   
    t = Now
    For x = 1 To 100000
        s1 = UTF8ToWin(s)
    Next
    Debug.Print "API", Now - t
   
    t = Now
    For x = 1 To 100000
        s1 = DecodeUTF8(s)
    Next
    Debug.Print "Pure VB6", Now - t
End Sub
Код: Выделить всё
ADODB.Stream   2,31481462833472E-05
API            0
Pure VB6       3,47222230629995E-05
Вот этим.

UTF8ToWin купировал до такого вида:
Код: Выделить всё
Public Function UTF8ToWin(inString As String) As String
Dim iStrSize As Long, lMaxSize As Long, str1 As String
    lMaxSize = Len(inString)
    str1 = String$(lMaxSize, 0&)
    iStrSize = MultiByteToWideChar(CP_UTF8, 0&, inString, &HFFFF, StrPtr(str1), lMaxSize)
    If Len(iStrSize) Then UTF8ToWin = Left$(str1, iStrSize)
End Function


А как теперь сделать WinToUTF8? Сколько я не игрался с этими апи, ничего не вышло :(

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Казахские "умляуты"

Сообщение trash » 17.06.2009 (Ср) 10:51

Вопрос снимаю.

Код: Выделить всё
Public Function WinToUTF8(strSrc As String) As String
On Error Resume Next
Dim nLen As Long
Dim strDst As String
Dim strRet As String
Dim nRet As Long
Dim p As Long
    nLen = Len(strSrc)
    strDst = String(nLen * 2, Chr(0))
    strRet = String(nLen * 2, Chr(0))
    p = StrPtr(strDst)
    nRet = MultiByteToWideChar(1251, &H1, strSrc, nLen, p, nLen)
    nRet = WideCharToMultiByte(CP_UTF8, 0, p, nRet, StrPtr(strRet), nLen * 2, ByVal 0, 0)
    ConvertCP = Left$(StrConv(strRet, vbUnicode), nRet)
End Function

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Казахские "умляуты"

Сообщение trash » 24.06.2009 (Ср) 15:48

trash писал(а):Вопрос снимаю.
Блин, не работает последний сорц(((( И ведь только заметил. Казахские символы игнорирует, конвертирует только русские. Что ему надо?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Казахские "умляуты"

Сообщение alibek » 24.06.2009 (Ср) 16:06

Как ты думаешь, что такое 1251?
Lasciate ogni speranza, voi ch'entrate.

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Казахские "умляуты"

Сообщение trash » 24.06.2009 (Ср) 16:41

Намек понял, но результат в руки не дался.

Сейчас заставляют в Казахстане переходить на новую казахскую кодовую страницу 1048 - не работает.
для обеспечения понимания зарубежной диаспорой новостных лент, ввело систему транслитерации казахской кириллицы посредством набора символов из турецкой кодовой страницы CP1254 - не работает.
Эта кодировка в части касающейся казахских букв происходит от так называемой кодовой страницы PT154 (Asian Cyrillic) - не нашел значение.
http://office.microsoft.com/ru-ru/help/HP100305701049.aspx - Казахский 1087 - не работает.
Кодировка CP1251-k (KazWin, казахская кодировка) - не нашел значение.

А ведь VBшной функции наплевать на кодовую страницу…

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Казахские "умляуты"

Сообщение trash » 24.06.2009 (Ср) 17:54

Как выяснилось, казахстанизация это вообще больная тема, единого решения нет. Самое удачное это. CP 1251 просто расширяется казахскими символами и последний сорц начинает работать без изменений.

Но теперь у меня возник другой вопрос — как быть, если хочется хранить строку с совсем разными языками? Допустим русским, арабским и китайским.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Казахские "умляуты"

Сообщение Хакер » 24.06.2009 (Ср) 18:12

Юникод для этого и создали.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Казахские "умляуты"

Сообщение trash » 24.06.2009 (Ср) 20:44

Ого, а я-то едва не забыл об этом.

Вопрос, собственно, в чем? Броузер в состоянии отображать одновременно что угодно в UTF-8. И MSSQL в nvarchar вроде бы может хранить то же самое (или я ошибаюсь?), но не в UTF-8. Почему же в слабом звене между ними (VB6) при конвертации самыми что ни на есть системными средствами того, что пришло в POST'е, у чешских символов ампутируются птички, а на китайских ставится большой знак вопроса? При том, что select, выполненный в Enterprise Manager'e, исправно возвращал все расовые казахские символы даже до установки вышеуказанной заплатки, а копипаста в него же китайской вязи выходила квадратами. Это что же, по неявным признакам кромсать строку и конвертировать, наугад подбирая кодовые страницы? Или хранить в базе непосредственно UTF-8? Тогда будут курить бамбук сторонние утилиты, обделенные утеэфом.

Где я ошибся в рассуждениях?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Казахские "умляуты"

Сообщение alibek » 24.06.2009 (Ср) 22:28

Юникод, с которым работает VB и MSSQL — это и есть WideChar.
Вызывая API-функцию, в которой аргумент указан ByVal As String, ты его преобразуешь в ANSI, после чего преобразуешь в Unicode, после чего преобразуешь в UTF-8.
Вот на первой стадии у тебя национальные символы скорее всего и теряются.
Lasciate ogni speranza, voi ch'entrate.

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 81

    TopList