Visual Basic, .NET, ASP, VBScript
 

   
   
     

Ôîðóì - Îáùèé ôîðóì

Ñòðàíèöà: 1 | 2 |

 

  Âîïðîñ: Êîäèðîâêè Äîáàâëåíî: 10.11.04 08:11  

Àâòîð âîïðîñà:  gvozd | Web-ñàéò: www.gvozdsoft.com
Åñòü ìîäóëü. Ïîìîãèòå â íåãî äîáàâèòü êîäèðîâêó UTF-8.
Ñàì ìîäóëü:

Option Explicit

Public Enum Code
    Win = 1
    Dos = 2
    Koi = 3
    Iso = 5
End Enum
Public Function Recode(Char As String, Src As Code, Dest As Code) As String
Const wDos As String = "°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ðÙÚÛÜÝÞßòóôõö÷øùñûüýþÿØú€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯àáâãäåæçèéêëìíîï"
Const wIso As String = "°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×¢ÙÚÛÜÝÞßòóôõö÷øùñûüýþÿØú°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîï"
Const wKoi As String = "�‘’�‡²´§¦µ¡¨®­¬ƒ„‰ˆ†€Š¯°«¥»¸± ¾¹º¶·ª©¢¤½³…‚�ŒŽ�‹™˜“›Ÿ—œž£–š�”¿¼•áâ÷çäåöúéêëìíîïðòóôõæèãþûýÿùøüàñÁÂ×ÇÄÅÖÚÉÊËÌÍÎÏÐÒÓÔÕÆÈÃÞÛÝßÙØÜÀÑ"
Const wWin As String = "€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
Const NotRecodedChar As String = "?"

If Src = Dest Then
    Recode = Char
    Exit Function
End If

Dim t As String, i As Long, tt As String, a As Long, ss As String, ch As String
If Src = Win Then
    t = Char
Else
    Select Case Src
        Case Koi: ss = wKoi
        Case Dos: ss = wDos
        Case Iso: ss = wIso
    End Select
    For i = 1 To Len(Char)
        ch = Mid(Char, i, 1)
        If Asc(ch) < 128 Then
            t = t & ch
        Else
            a = InStr(1, ss, ch, vbBinaryCompare)
            If a = 0 Then
                t = t & NotRecodedChar
            Else
                t = t & Mid$(wWin, a, 1)
            End If
        End If
    Next i
End If

If Dest = Win Then
    Recode = t
Else
    Select Case Dest
        Case Koi: ss = wKoi
        Case Dos: ss = wDos
        Case Iso: ss = wIso
    End Select
    For i = 1 To Len(Char)
        ch = Mid(t, i, 1)
        If Asc(ch) < 128 Then
            tt = tt & ch
        Else
            a = InStr(1, wWin, ch, vbBinaryCompare)
            If a = 0 Then
                tt = tt & NotRecodedChar
            Else
                tt = tt & Mid$(ss, a, 1)
            End If
        End If
    Next i
    Recode = tt
End If
End Function

Î÷åíü íóæíî.

Îòâåòèòü

  Îòâåòû Âñåãî îòâåòîâ: 29  

Íîìåð îòâåòà: 1
Àâòîð îòâåòà:
 LamerOnLine



ICQ: 334781088 

Âîïðîñîâ: 108
Îòâåòîâ: 2822
 Ïðîôèëü | | #1 Äîáàâëåíî: 10.11.04 08:57
À åñëè íå ñåêðåò - çà÷åì? Åñëè ýòî ïåðåêîäèðîâùèê - íå ïðîùå èñïîëüçîâàòü API WideCharToMultiByte ?

Îòâåòèòü

Íîìåð îòâåòà: 2
Àâòîð îòâåòà:
 gvozd



Ðàçðàáîò÷èê Offline Client

Âîïðîñîâ: 164
Îòâåòîâ: 1317


 Web-ñàéò: www.gvozdsoft.com
 Ïðîôèëü | | #2
Äîáàâëåíî: 10.11.04 09:13
Íå ñåêðåò. ß ïèøó òåêñòîâûé ðåäàêòîð ñ ïîääåðæêîé ðàçëè÷íûõ êîäèðîâîê.
Íàøåë äàííûé ìîäóëü. Îí ìíå ïîíðàâèëñÿ - íèêàêîãî ãåìîðà è âûçûâàòü
ïðîñòî. Òåïåðü òóäà æå õî÷ó äîáàâèòü Þíèêîä. Õîòåëîñü áû â òàêîì æå
âèäå, êàê è äðóãèå êîäèðîâêè.

Îòâåòèòü

Íîìåð îòâåòà: 3
Àâòîð îòâåòà:
 Àëåêñàíäð



Ðàçðàáîò÷èê Offline Client

ICQ: 204034 

Âîïðîñîâ: 106
Îòâåòîâ: 1919
 Ïðîôèëü | | #3 Äîáàâëåíî: 10.11.04 14:23
Ñìîòðè â÷åðàøíèé/ñåãîäíÿøíèé îòâåò sne íà îäèí èç âîïðîñîâ. Òàì åñòü ýòà ôóíêöèÿ. Åñëè íå íàøåë, òî ïèøè - âûøëþ.

Îòâåòèòü

Íîìåð îòâåòà: 4
Àâòîð îòâåòà:
 gvozd



Ðàçðàáîò÷èê Offline Client

Âîïðîñîâ: 164
Îòâåòîâ: 1317


 Web-ñàéò: www.gvozdsoft.com
 Ïðîôèëü | | #4
Äîáàâëåíî: 10.11.04 16:51
Ôóíêöèÿ-òî ó ìåíÿ åñòü. ß õî÷ó, ÷òîá áûëî òàê æå êàê è ñ äðóãèìè
êîäèðîâêàìè. Íóæíà ñòðîêà ñèìâîëîâ. Êòî-íèáóäü ïîìîæåò òàêîå çàáàöàòü?

Îòâåòèòü

Íîìåð îòâåòà: 5
Àâòîð îòâåòà:
 Comanche



Âîïðîñîâ: 87
Îòâåòîâ: 459
 Ïðîôèëü | | #5 Äîáàâëåíî: 11.11.04 22:43
À òû ïîïðîáóé â ïðîãðàììêó "Øòèðëèö" çàãíàòü ñòðîêó, ñîäåðæàùóþ âåñü àëôàâèò, è çàòåì ñêîìàíäîâàòü Øòèðëèöó "WIN --> UTF-8". Ïîëó÷èòñÿ ñòðîêà, êîòîðóþ ìîæíî ñðàâíèòü ñ èñõîäíîé è ïîíÿòü, êòî â êîãî ïðåâðàùàåòñÿ.

Âîîáùå, åñëè òû çàíÿëñÿ ðó÷íîé âîçí¸é ñ êîäèðîâêàìè, òî "Øòèðëèö" áóäåò òåáå íåçàìåíèìûì ïîìîùíèêîì.

Îòâåòèòü

Íîìåð îòâåòà: 6
Àâòîð îòâåòà:
 LamerOnLine



ICQ: 334781088 

Âîïðîñîâ: 108
Îòâåòîâ: 2822
 Ïðîôèëü | | #6 Äîáàâëåíî: 12.11.04 10:00
Íå, íó íå ïîéìó ÿ - çà÷åì èçîáðåòàòü âåëîñèïåä? Âåäü â ÀÏÈ óæå âñå íàïèñàíî.

Îòâåòèòü

Íîìåð îòâåòà: 7
Àâòîð îòâåòà:
 Comanche



Âîïðîñîâ: 87
Îòâåòîâ: 459
 Ïðîôèëü | | #7 Äîáàâëåíî: 12.11.04 12:02
Äëÿ ïåðåâîäà â UTF-8(-7), WideCharToMultiByte ñãîäèòñÿ, ñîãëàñåí. Íî ñ ISO è KOI îíà íå ïîìîæåò - ïðèä¸òñÿ èñïîëüçîâàòü ÷òî-òî äðóãîå. Ó gvozd ýòî "÷òî-òî" óæå åñòü - òà ôóíêöèÿ, êîòîðóþ îí òóò ïðèâ¸ë. Ïîýòîìó - ÷òîáû ðåøåíèå áûëî åäèíîîáðàçíûì - ëîãè÷íî UTF-ïîääåðæêó çàòàùèòü â òó æå ôóíêöèþ (ìîæíî è ñ èñïîëüçîâàíèåì WideCharToMultiByte). Èëè íåò?!

Îòâåòèòü

Íîìåð îòâåòà: 8
Àâòîð îòâåòà:
 LamerOnLine



ICQ: 334781088 

Âîïðîñîâ: 108
Îòâåòîâ: 2822
 Ïðîôèëü | | #8 Äîáàâëåíî: 12.11.04 12:06
 êàêîì ñìûñëå ñ ISO è KOI íå ïîìîæåò? Òû î ÷åì?

Îòâåòèòü

Íîìåð îòâåòà: 9
Àâòîð îòâåòà:
 ZagZag



ICQ: 295002202 

Âîïðîñîâ: 87
Îòâåòîâ: 1684
 Ïðîôèëü | | #9 Äîáàâëåíî: 12.11.04 12:20
Âçÿë ïîäðîãðàììóëèíó Barsic'a (ïî-ìîåìó) è íåìíîãî ìîäèôèöèðîâàë
http://vbnet.ru/forum/show.aspx?id=57714

Îòäåëüíûé ìîäóëü

Attribute VB_Name = "basConvertCharset"
Option Explicit

Public Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As
String, ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal
lpUsedDefaultChar As Long) As Long
Public Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As
String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As String, ByVal cchWideChar As Long) As Long
Public Const MB_PRECOMPOSED = &H1

Enum Charset
    ;DOS = 866
    Windows = 1251
    ISO = 28595
    KOI8R = 20866
End Enum

Public Function ConvertCharset(ByVal strString As String, ByVal FromCharset As Charset, ByVal ToCharset As Charset) As String
Dim lngLength As Long
Dim strWideChar As String
Dim strReturn As String
Dim lngReturnLength As Long

    lngLength = Len(strString)
    strWideChar = String$(lngLength * 2, Chr(0))
    strReturn = String$(lngLength * 2, Chr(0))
    lngReturnLength = MultiByteToWideChar(FromCharset, MB_PRECOMPOSED, strString, lngLength, strWideChar, lngLength)
    WideCharToMultiByte ToCharset, 0, strWideChar, lngReturnLength, strReturn, lngLength * 2, ByVal 0, 0
    ConvertCharset = Left$(strReturn, lngReturnLength)
End Function


Âñå ðàáîòàåò è ISO è KOI è åùå ïàðó òûñÿ÷ êîäèðîâîê (ñì. òîïèê, óêàçàííûé âûøå), ò. ê. ýòó ô-öèþ èñïîëüçóåò ñàìà âèíäà

Îòâåòèòü

Íîìåð îòâåòà: 10
Àâòîð îòâåòà:
 gvozd



Ðàçðàáîò÷èê Offline Client

Âîïðîñîâ: 164
Îòâåòîâ: 1317


 Web-ñàéò: www.gvozdsoft.com
 Ïðîôèëü | | #10
Äîáàâëåíî: 12.11.04 12:21
À êàê âñå ýòî íà ÀÏÈ ñäåëàòü? Âñå êîäèðîâêè.
ß äîáàâèë â òîò ìîäóëü êîä sne è âñå. Ïðàâäà íå çíàþ, ïðàâèëüíî ëè îí
ðàáîòàåò.

Îòâåòèòü

Íîìåð îòâåòà: 11
Àâòîð îòâåòà:
 LamerOnLine



ICQ: 334781088 

Âîïðîñîâ: 108
Îòâåòîâ: 2822
 Ïðîôèëü | | #11 Äîáàâëåíî: 12.11.04 12:26
Àãà, è ÿ î òîì æå. Òîëüêî åùå íàäî äîáàâèòü
65000 - UTF-7
65001 - UTF-8

Îòâåòèòü

Íîìåð îòâåòà: 12
Àâòîð îòâåòà:
 Comanche



Âîïðîñîâ: 87
Îòâåòîâ: 459
 Ïðîôèëü | | #12 Äîáàâëåíî: 12.11.04 12:29
Áûë íåïðàâ, âñïûëèë :))

Îòâåòèòü

Íîìåð îòâåòà: 13
Àâòîð îòâåòà:
 LamerOnLine



ICQ: 334781088 

Âîïðîñîâ: 108
Îòâåòîâ: 2822
 Ïðîôèëü | | #13 Äîáàâëåíî: 12.11.04 12:37

À êàê âñå ýòî íà ÀÏÈ ñäåëàòü? Âñå êîäèðîâêè.

WideCharToMultiByte, îäíîé ñòðî÷êîé.

Îòâåòèòü

Íîìåð îòâåòà: 14
Àâòîð îòâåòà:
 ZagZag



ICQ: 295002202 

Âîïðîñîâ: 87
Îòâåòîâ: 1684
 Ïðîôèëü | | #14 Äîáàâëåíî: 12.11.04 12:42
Èçâåñòíûå ìíå íà äàííûé ìîìåíò êîäèðîâêè (íà ñàìîì äåëå èõ áîëüøå :) )
Åñëè åñòü îøèáêè, îïîðàâüòå ìåíÿ, ò. ê. âûäèðàë ÿ ýòî ïîëóàâòîìàòè÷åñêèì ñïîñîáîì :)


Const ANSI_CHARSET As Long = 0
Const DEFAULT_CHARSET As Long = 1
Const SYMBOL_CHARSET As Long = 2
Const MAC_CHARSET As Long = 77
Const SHIFTJIS_CHARSET As Long = 128
Const HANGEUL_CHARSET As Long = 129
Const JOHAB_CHARSET As Long = 130
Const GB2312_CHARSET As Long = 134
Const CHINESEBIG5_CHARSET As Long = 136
Const GREEK_CHARSET As Long = 161
Const TURKISH_CHARSET As Long = 162
Const VIETNAMESE_CHARSET As Long = 163
Const HEBREW_CHARSET As Long = 177
Const ARABIC_CHARSET As Long = 178
Const BALTIC_CHARSET As Long = 186
Const RUSSIAN_CHARSET As Long = 204
Const THAI_CHARSET As Long = 222
Const EASTEUROPE_CHARSET As Long = 238
Const OEM_CHARSET As Long = 255
Const SETCHARSET As Long = 772

Îòâåòèòü

Íîìåð îòâåòà: 15
Àâòîð îòâåòà:
 LamerOnLine



ICQ: 334781088 

Âîïðîñîâ: 108
Îòâåòîâ: 2822
 Ïðîôèëü | | #15 Äîáàâëåíî: 12.11.04 12:57
Íî òîëüêî íå ñòîèò ïóòàòü CharSet è CodePage. Ýòî íåìíîãî ðàçíûå øòóêè...

Îòâåòèòü

Ñòðàíèöà: 1 | 2 |

Ïîèñê ïî ôîðóìó



© Copyright 2002-2011 VBNet.RU | Ïèøèòå íàì