Ñòðàíèöà: 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-ñàéò:
Ïðîôèëü | | #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-ñàéò:
Ïðîôèëü | | #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
 
OS = 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-ñàéò:
Ïðîôèëü | | #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. Ýòî íåìíîãî ðàçíûå øòóêè...