Вопрос: Кодировки | Добавлено: 10.11.04 08:11 |
Автор вопроса: ![]() |
Ответы | Всего ответов: 29 |
Номер ответа: 16 Автор ответа: ![]() ![]() ![]() ![]() 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 459 |
Профиль | Цитата | #17 | Добавлено: 12.11.04 13:11 |
2LamerOnLine: слушай, а ты уверен в тех двух значениях для UTF-7 и UTF-8? чё-то не перекодирует - даёт строку, состоящую из null-ей... ни в ту, ни в другую сторону (Win1251 <--> UTF) |
Номер ответа: 18 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #18 | Добавлено: 12.11.04 13:18 |
Уверен. Только я не уверен во вышеприведенном коде. Думается, там
FromCharset и ToCharset следует поменять местами. |
Номер ответа: 19 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 459 |
Профиль | Цитата | #19 | Добавлено: 12.11.04 13:20 |
Да нет, они на своих местах - всё остальное перекодируется нормально (KOI <--> Win1251 и т.д.). |
Номер ответа: 20 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #20 | Добавлено: 12.11.04 13:22 |
Хотя это я, конечно, прогнал. Все там правильно.
|
Номер ответа: 21 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 459 |
Профиль | Цитата | #21 | Добавлено: 12.11.04 13:26 |
А в чём тогда м.б. дело?! |
Номер ответа: 22 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #22 | Добавлено: 12.11.04 13:59 |
Возможно в том что Unicode - не MultiByte ![]() |
Номер ответа: 23 Автор ответа: ![]() ![]() ![]() ICQ: 295002202 Вопросов: 87 Ответов: 1684 |
Профиль | Цитата | #23 | Добавлено: 12.11.04 14:02 |
Мдя... не то я тогда кинул... а про CodePage в API Viewer'e я констант не нашел
Спасибо, LOL |
Номер ответа: 24 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 459 |
Профиль | Цитата | #24 | Добавлено: 12.11.04 14:26 |
М-да... и как же тогда раскодировать из UTF?!
Есть идеи? |
Номер ответа: 25 Автор ответа: ![]() ![]() ![]() ![]() 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 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 Автор ответа: ![]() ![]() Разработчик Offline Client Вопросов: 164 Ответов: 1317 ![]() |
Web-сайт: Профиль | Цитата | #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& ![]() 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-сайт: Профиль | Цитата | #29 | Добавлено: 13.11.04 16:42 |
ИМХО, для кодирования в юникод будет достаточно функции StrConv с
константой vbUnicode. Либо API функция MultiByteToWideChar. |
|