Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Кодировки Добавлено: 10.11.04 08:11  

Автор вопроса:  gvozd | Web-сайт: www.gvozdsoft.com

Ответить

  Ответы Всего ответов: 29  

Номер ответа: 16
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #16 Добавлено: 12.11.04 13:00
Вот такие Code Page мы имеем на данный момент (возможно что-то упущу)

      037 IBM EBCDIC - U.S./Canada
      437 OEM - United States
      500 IBM EBCDIC - International
      708 Arabic - ASMO 708
      709 Arabic - ASMO 449+, BCON V4
      710 Arabic - Transparent Arabic
      720 Arabic - Transparent ASMO
      737 OEM - Greek (formerly 437G)
      775 OEM - Baltic
      850 OEM - Multilingual Latin I
      852 OEM - Latin II
      855 OEM - Cyrillic (primarily Russian)
      857 OEM - Turkish
      858 OEM - Multlingual Latin I + Euro symbol
      860 OEM - Portuguese
      861 OEM - Icelandic
      862 OEM - Hebrew
      863 OEM - Canadian-French
      864 OEM - Arabic
      865 OEM - Nordic
      866 OEM - Russian
      869 OEM - Modern Greek
      870 IBM EBCDIC - Multilingual/ROECE (Latin-2)
      874 ANSI/OEM - Thai (same as 28605, ISO 8859-15)
      875 IBM EBCDIC - Modern Greek
      932 ANSI/OEM - Japanese, Shift-JIS
      936 ANSI/OEM - Simplified Chinese (PRC, Singapore)
      949 ANSI/OEM - Korean (Unified Hangeul Code)
      950 ANSI/OEM - Traditional Chinese (Taiwan; Hong Kong SAR, PRC)
      1026 IBM EBCDIC - Turkish (Latin-5)
      1047 IBM EBCDIC - Latin 1/Open System
      1140 IBM EBCDIC - U.S./Canada (037 + Euro symbol)
      1141 IBM EBCDIC - Germany (20273 + Euro symbol)
      1142 IBM EBCDIC - Denmark/Norway (20277 + Euro symbol)
      1143 IBM EBCDIC - Finland/Sweden (20278 + Euro symbol)
      1144 IBM EBCDIC - Italy (20280 + Euro symbol)
      1145 IBM EBCDIC - Latin America/Spain (20284 + Euro symbol)
      1146 IBM EBCDIC - United Kingdom (20285 + Euro symbol)
      1147 IBM EBCDIC - France (20297 + Euro symbol)
      1148 IBM EBCDIC - International (500 + Euro symbol)
      1149 IBM EBCDIC - Icelandic (20871 + Euro symbol)
      1200 Unicode UCS-2 Little-Endian (BMP of ISO 10646)
      1201 Unicode UCS-2 Big-Endian
      1250 ANSI - Central European
      1251 ANSI - Cyrillic
      1252 ANSI - Latin I
      1253 ANSI - Greek
      1254 ANSI - Turkish
      1255 ANSI - Hebrew
      1256 ANSI - Arabic
      1257 ANSI - Baltic
      1258 ANSI/OEM - Vietnamese
      1361 Korean (Johab)
      10000 MAC - Roman
      10001 MAC - Japanese
      10002 MAC - Traditional Chinese (Big5)
      10003 MAC - Korean
      10004 MAC - Arabic
      10005 MAC - Hebrew
      10006 MAC - Greek I
      10007 MAC - Cyrillic
      10008 MAC - Simplified Chinese (GB 2312)
      10010 MAC - Romania
      10017 MAC - Ukraine
      10021 MAC - Thai
      10029 MAC - Latin II
      10079 MAC - Icelandic
      10081 MAC - Turkish
      10082 MAC - Croatia
      12000 Unicode UCS-4 Little-Endian
      12001 Unicode UCS-4 Big-Endian
      20000 CNS - Taiwan
      20001 TCA - Taiwan
      20002 Eten - Taiwan
      20003 IBM5550 - Taiwan
      20004 TeleText - Taiwan
      20005 Wang - Taiwan
      20105 IA5 IRV International Alphabet No. 5 (7-bit)
      20106 IA5 German (7-bit)
      20107 IA5 Swedish (7-bit)
      20108 IA5 Norwegian (7-bit)
      20127 US-ASCII (7-bit)
      20261 T.61
      20269 ISO 6937 Non-Spacing Accent
      20273 IBM EBCDIC - Germany
      20277 IBM EBCDIC - Denmark/Norway
      20278 IBM EBCDIC - Finland/Sweden
      20280 IBM EBCDIC - Italy
      20284 IBM EBCDIC - Latin America/Spain
      20285 IBM EBCDIC - United Kingdom
      20290 IBM EBCDIC - Japanese Katakana Extended
      20297 IBM EBCDIC - France
      20420 IBM EBCDIC - Arabic
      20423 IBM EBCDIC - Greek
      20424 IBM EBCDIC - Hebrew
      20833 IBM EBCDIC - Korean Extended
      20838 IBM EBCDIC - Thai
      20866 Russian - KOI8-R
      20871 IBM EBCDIC - Icelandic
      20880 IBM EBCDIC - Cyrillic (Russian)
      20905 IBM EBCDIC - Turkish
      20924 IBM EBCDIC - Latin-1/Open System (1047 + Euro symbol)
      20932 JIS X 0208-1990 & 0121-1990
      20936 Simplified Chinese (GB2312)
      21025 IBM EBCDIC - Cyrillic (Serbian, Bulgarian)
      21027 Extended Alpha Lowercase
      21866 Ukrainian (KOI8-U)
      28591 ISO 8859-1 Latin I
      28592 ISO 8859-2 Central Europe
      28593 ISO 8859-3 Latin 3
      28594 ISO 8859-4 Baltic
      28595 ISO 8859-5 Cyrillic
      28596 ISO 8859-6 Arabic
      28597 ISO 8859-7 Greek
      28598 ISO 8859-8 Hebrew
      28599 ISO 8859-9 Latin 5
      28605 ISO 8859-15 Latin 9
      29001 Europa 3
      38598 ISO 8859-8 Hebrew
      50220 ISO 2022 Japanese with no halfwidth Katakana
      50221 ISO 2022 Japanese with halfwidth Katakana
      50222 ISO 2022 Japanese JIS X 0201-1989
      50225 ISO 2022 Korean
      50227 ISO 2022 Simplified Chinese
      50229 ISO 2022 Traditional Chinese
      50930 Japanese (Katakana) Extended
      50931 US/Canada and Japanese
      50933 Korean Extended and Korean
      50935 Simplified Chinese Extended and Simplified Chinese
      50936 Simplified Chinese
      50937 US/Canada and Traditional Chinese
      50939 Japanese (Latin) Extended and Japanese
      51932 EUC - Japanese
      51936 EUC - Simplified Chinese
      51949 EUC - Korean
      51950 EUC - Traditional Chinese
      52936 HZ-GB2312 Simplified Chinese
      54936 Windows XP: GB18030 Simplified Chinese (4 Byte)
      57002 ISCII Devanagari
      57003 ISCII Bengali
      57004 ISCII Tamil
      57005 ISCII Telugu
      57006 ISCII Assamese
      57007 ISCII Oriya
      57008 ISCII Kannada
      57009 ISCII Malayalam
      57010 ISCII Gujarati
      57011 ISCII Punjabi
      65000 Unicode UTF-7
      65001 Unicode UTF-8

Ответить

Номер ответа: 17
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #17 Добавлено: 12.11.04 13:11
2LamerOnLine: слушай, а ты уверен в тех двух значениях для UTF-7 и UTF-8? чё-то не перекодирует - даёт строку, состоящую из null-ей... ни в ту, ни в другую сторону (Win1251 <--> UTF)

Ответить

Номер ответа: 18
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #18 Добавлено: 12.11.04 13:18
Уверен. Только я не уверен во вышеприведенном коде. Думается, там
FromCharset и ToCharset следует поменять местами.

Ответить

Номер ответа: 19
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #19 Добавлено: 12.11.04 13:20
Да нет, они на своих местах - всё остальное перекодируется нормально (KOI <--> Win1251 и т.д.).

Ответить

Номер ответа: 20
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #20 Добавлено: 12.11.04 13:22
Хотя это я, конечно, прогнал. Все там правильно.

Ответить

Номер ответа: 21
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #21 Добавлено: 12.11.04 13:26
А в чём тогда м.б. дело?!

Ответить

Номер ответа: 22
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #22 Добавлено: 12.11.04 13:59
Возможно в том что Unicode - не MultiByte :)

Ответить

Номер ответа: 23
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #23 Добавлено: 12.11.04 14:02
Мдя... не то я тогда кинул... а про CodePage в API Viewer'e я констант не нашел
Спасибо, LOL

Ответить

Номер ответа: 24
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #24 Добавлено: 12.11.04 14:26
М-да... и как же тогда раскодировать из UTF?!
Есть идеи?

Ответить

Номер ответа: 25
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #25 Добавлено: 12.11.04 14:40
Ну, примерно
Dim Str1 As String
Dim Str2 As String
Str2 = Space(20)
Str1 = "Привет"
MultiByteToWideChar windows, 0, Str1, Len(Str1) + 1, Str2, Len(Str2) /
LenB(Left$(Str2, 1))
MsgBox StrConv(Str2, vbFromUnicode)

Это в UTF, обратно тоже несложно. Приведи строку в UTF, попробуем ее
конвертнуть.

Ответить

Номер ответа: 26
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #26 Добавлено: 12.11.04 15:19
UTF-7:
+BB8EQAQ+BDMEQAQwBDwEPAQw +BCgEQgQ4BEAEOwQ4BEY +BEAEMARBBEgEOAREBEAEPgQyBEsEMgQwBDUEQg +BEAEQwRBBEEEOgQ4BDU +BEIENQQ6BEEEQgRL, +BD0EMAQ/BDgEQQQwBD0EPQRLBDU +BDI +BEAEMAQ3BDsEOARHBD0ESwRF +BEAEQwRBBEEEOgQ4BEU +BDoEPgQ0BDgEQAQ+BDIEOgQwBEU (Win-1251, KOI-8r, DOS, ISO-8859-5, MAC +BDg +BDQEQA.), +BDI +BEIEQAQwBD0EQQQ7BDgEQgQ1BEAEMARGBDgEOA, +BDI +BEQEPgRABDwEMARCBDAERQ Quoted Printable, UTF-7, UTF-8, RTF, HTML, +BDcEMAQ6BD4ENAQ4BEAEPgQyBDAEPQQ9BEsENQ +BEE +BD8EPgQ8BD4ESQRMBE4 uuencode, xxencode, base64, binhex, BtoA +BEIENQQ6BEEEQgRL +BDg +BEQEMAQ5BDsESw, +BDA +BEIEMAQ6BDYENQ +BEIENQQ6BEEEQgRL, +BD8EPgQ0BDIENQRABDMEPQRDBDIESAQ4BDUEQQRP +BEEEPAQ1BEgEMAQ9BD0EPgQ8BEM +BD8ENQRABDUEOgQ+BDQEOARABD4EMgQwBD0EOARO +BDg, +BDI +BEcEMARBBEIEPQQ+BEEEQgQ4, +BDgEPAQ1BE4ESQQ4BEU +BEQEQAQwBDMEPAQ1BD0EQgRL +BDI +BEAEMAQ3BDsEOARHBD0ESwRF +BDoEPgQ0BDgEQAQ+BDIEOgQwBEU. +BCgEQgQ4BEAEOwQ4BEY +BEEEPwQ+BEEEPgQxBDUEPQ +BD8EQAQ4BDIENQRBBEIEOA +BEIEMAQ6BDgENQ +BEIENQQ6BEEEQgRL +BDo +BDoEPgQ0BDgEQAQ+BDIEOgQ1 Windows (1251) +BDQEOwRP +BDgERQ +BD8EQAQ+BEcEQgQ1BD0EOARP +BDg +BDQEOwRP +BDQEMAQ7BEwEPQQ1BDkESAQ1BDk +BEAEMAQxBD4EQgRL +BEE +BD0EOAQ8BDg (+BEEEPgRFBEAEMAQ9BDUEPQQ4BDU, +BD8ENQRHBDAEQgRM, +BDgEQQQ/BEAEMAQyBDsENQQ9BDgETw +BDg +BD8EQA.), +BDA +BEIEMAQ6BDYENQ +BD8EQAQ+BDgENwQyBDUEQQRCBDg +BD4EMQRABDAEQgQ9BEsENQ +BD8EQAQ1BD4EMQRABDAENwQ+BDIEMAQ9BDgETw. +BBoEPgQ0BDgEQAQ+BDIEOgQ4 +BDg +BEEERQQ1BDwESw +BEIEQAQwBD0EQQQ7BDgEQgQ1BEAEMARGBDgEOA +BDwEPgQ2BD0EPg +BDQEPgQxBDAEMgQ7BE8EQgRM +BDg +BDoEPgRABEAENQQ6BEIEOARABD4EMgQwBEIETA.

+BBwENQRFBDAEPQQ4BDcEPA +BEAEMARBBD8EPgQ3BD0EMAQyBDAEPQQ4BE8 +BDoEPgQ0BDgEQAQ+BDIEOgQ4 +BDwEPgQ2BDUEQg +BDcEMAQ/BEMEQQQ6BDAEQgRMBEEETw +BDAEMgRCBD4EPAQwBEIEOARHBDUEQQQ6BDg +BD8EQAQ4 +BDIEQQRCBDAEMgQ6BDU +BEIENQQ6BEEEQgQw +BDgENw +BDEEQwREBDUEQAQw +BD4EMQQ8BDUEPQQw +BDg +BD8EQAQ4 +BDcEMAQzBEAEQwQ3BDoENQ +BEQEMAQ5BDsEMA.

Ответить

Номер ответа: 27
Автор ответа:
 gvozd



Разработчик Offline Client

Вопросов: 164
Ответов: 1317


 Web-сайт: www.gvozdsoft.com
 Профиль | | #27
Добавлено: 12.11.04 17:12
Вы меня запутали. Как я понял, код, который дал ZagZag UTF-8 не
перекодирует. Так что делать? Можно ли добавить в ОДНУ функцию эту
UTF? Может, есть универсальный код?

Ответить

Номер ответа: 28
Автор ответа:
 Александр



Разработчик Offline Client

ICQ: 204034 

Вопросов: 106
Ответов: 1919
 Профиль | | #28 Добавлено: 12.11.04 19:07
М-да... и как же тогда раскодировать из UTF?!
Есть идеи?

Попробуй вот это:


'  APIs 
Private Declare Function LocalAlloc Lib "kernel32.dll" (ByVal wFlags As Long, ByVal wBytes As Long) As Long
Private Declare Function LocalFree Lib "kernel32.dll" (ByVal hMem As Long) As Long

Private Declare Function MultiByteToWideChar Lib "kernel32.dll" (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
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long

Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

'  Constants 
Private Const CP_UTF8       As Long = 65001
Private Const LMEM_ZEROINIT As Long = &H40

'--------------------------------------------------------------------------------
' Проект     :  OfflineClient
' Процедура  :  WinToUTF8
' Описание   :  Перевод строки в UTF8 кодировку
' Кем создан :  SNE
' Дата-Время :  09.11.2004-11:52:01
'
' Параметры  :  inString    - Строка, в win кодировке
'               lMaxSize    - Максимальный размер строки
'--------------------------------------------------------------------------------
Private Function WinToUTF8(ByRef inString As String, _
                           ByVal lMaxSize As Long) As String

        Dim hMemLock1   As Long, hMemLock2  As Long
        Dim iStrSize    As Long

        hMemLock1 = LocalAlloc(LMEM_ZEROINIT, lMaxSize)
        hMemLock2 = LocalAlloc(LMEM_ZEROINIT, lMaxSize)

        iStrSize = MultiByteToWideChar(0&, 0&, inString, &HFFFF, hMemLock1, lMaxSize)
        iStrSize = WideCharToMultiByte(65001, 0&, hMemLock1, iStrSize, hMemLock2, lMaxSize, 0&, 0&;)  ' CP_UTF8

        If Len(iStrSize) Then
            WinToUTF8 = String$(iStrSize, 0&;)
            Call CopyMemory(ByVal WinToUTF8, ByVal hMemLock2, iStrSize)
        End If

        Call LocalFree(hMemLock1)
        Call LocalFree(hMemLock2)
End Function

'--------------------------------------------------------------------------------
' Проект     :  OfflineClient
' Процедура  :  UTF8ToWin
' Описание   :  Перевод UTF8 строки в WIN кодировку
' Кем создан :  SNE
' Дата-Время :  09.11.2004-11:56:58
'
' Параметры  :  inString    - Строка в utf8 кодировке
'               lMaxSize    - Максимальный размер строки
'--------------------------------------------------------------------------------
Private Function UTF8ToWin(ByRef inString As String, _
                           ByVal lMaxSize As Long) As String

        Dim hMemLock1   As Long, hMemLock2  As Long
        Dim iStrSize    As Long

        hMemLock1 = LocalAlloc(LMEM_ZEROINIT, lMaxSize)
        hMemLock2 = LocalAlloc(LMEM_ZEROINIT, lMaxSize)

        iStrSize = MultiByteToWideChar(CP_UTF8, 0&, inString, &HFFFF, hMemLock1, lMaxSize)
        iStrSize = WideCharToMultiByte(0&, 0&, hMemLock1, &HFFFF, hMemLock2, iStrSize, 0&, 0&;)

        If Len(iStrSize) Then
            UTF8ToWin = String$(iStrSize, 0&;)
            Call CopyMemory(ByVal UTF8ToWin, ByVal hMemLock2, iStrSize)
        End If

        Call LocalFree(hMemLock1)
        Call LocalFree(hMemLock2)
End Function

Ответить

Номер ответа: 29
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #29
Добавлено: 13.11.04 16:42
ИМХО, для кодирования в юникод будет достаточно функции StrConv с
константой vbUnicode.
Либо API функция MultiByteToWideChar.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам