|
|
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Есть веб-приложение, IIS, VbScript, dll (на VB). Кодировка страниц - utf-8. Сервера, на которых данное приложение работает, могут быть на любых языках (помимо ru и eng). Загружается файл из браузера на сервер на любом языке, имя его также передается в utf-8, на сервере соответственно он не может быть сохранен, т.к. пытается быть сохраненным с именем в кодировке utf-8. Вопрос - что делать? Очевидно, надо каждое имя файла перекодировать под соответствующую кодировку, установленную на сервере. Вопрос - чем? Желательно пример кода на VB или VBScript/ Не самому же с нуля писать перекодировщик с utf-8 на всевозможные языки... Уверен, что решение есть, только найти его не просто оказалось. Может кто сталкивался. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2007, 12:30 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
StrConv не подойдет? I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2007, 12:40 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
как-то с ней не получается в локальной кодировке результат увидеть... Может api какой-то есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2007, 12:45 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
есть что-то типа Wide2Char Это из серии Oem2Char, Char2Oem ЗЫЖ StrConv делает тоже самое I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2007, 13:59 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
Не совсем понятен вопрос. Например, загружаем файл с какой-нибудь арабской машины, где он называется بغفجכس (по арабски - "Отчеты"), на сервер, где локализация английская. И что мы должны в итоге получить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2007, 16:31 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
Изучив msdn пришел к выводу, что нужен работающий пример на VB с ипользованием WideCharToMultiByte. Есть такое? С арабским интерестный пример :) Пока могу сказать, как это получается с русскими именами. Все старницы в utf-8, берем файл "мой документ.doc" и грузим его на сервер через upload формы. На сервере папка, которая примет этот файл, но с оригинальным именем, например получится должно C:\DownloadedFiles\мой документ.doc. А загружается же он вот с таким именем "РјРѕР№ документ.doc". И сервер его не очень то хочет в таком виде принимать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2007, 19:07 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
Нашел такой пример. Теперь не могу найти цифровой код кодировки utf-8, он вообще есть? Преобразование строки из одной кодировки в другую 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 ' use precomposed chars '=============Функция перекодировки=================== Public Function Convert(ByVal strSrc As String, ByVal nFromCP As Long, ByVal nToCP As Long) As String 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, MB_PRECOMPOSED, strSrc, nLen, strDst, nLen) nRet = WideCharToMultiByte(nToCP, 0, strDst, nRet, strRet, nLen * 2, ByVal 0, 0) Convert = Left(strRet, nRet) End Function Пример Имеем, допустим, TextBox. В нем текст в кодировке KOI, надо получить в Windows. Запускаешь: TextBox = StringConvert(TextBox, 20866, 1251) Значения для часто используемых кодировок: Central European (DOS) 852 Central European Alphabet (Windows) 1250 Central European Alphabet (ISO) 28592 Cyrillic Alphabet (DOS) 866 Cyrillic Alphabet (Windows) 1251 Cyrillic Alphabet (ISO) 28595 Cyrillic Alphabet (KOI8-R) 20866 Ukrainian Alphabet (KOI8-RU) 21866 Latin 3 Alphabet (ISO) 28593 Western Alphabet 1252 Baltic Alphabet (Windows) 1257 Baltic Alphabet (ISO) 28594 Greek Alphabet (Windows) 1253 Greek Alphabet (ISO) 28597 Turkish Alphabet 1254 Arabic Alphabet (Windows) 1256 Arabic Alphabet (ISO) 28596 Hebrew (DOS) 862 Hebrew Alphabet (Windows) 1255 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2007, 13:34 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
CP_UTF8 Код: plaintext вот здесь посмотрите I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2007, 13:52 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
попробуй 65001 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2007, 13:54 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
А как пробовал с StrConv, вроде как раз для этого и придумана (и не только конечно) Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2007, 15:14 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
Спасибо за советы, буду пробовать. А с strconv делаю вот так: st_in="РјРѕР№ документ.doc" st1 = CStr(strconv(st_in,vbFromUnicode)) Out st1 или вот так: st_in="РјРѕР№ документ.doc" st1 = strconv(st_in,vbFromUnicode) Out st1 результат одинаков 800a000d|Type_mismatch:_'strconv' Или тут какое-то хитрое преобразование надо применить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2007, 15:36 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
писать латиницей и не будет проблем. при желании на выходе переделывать обратно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2007, 15:38 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
да, пожалуй это единственый способ писать латиницей, только в оригинальный язык в и из мнемонического вида придедтся преобразовывать какждый раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2007, 15:57 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
Вопрос навстречу. По сути мне надо иметь возможность только три языка поддерживать - русский, английский и болгарский. Файлы загружаться будут на сервер с английской windows, имена файлов как на русском и английском, так и на болгарском (клиенты разноязычные и имена файлов у них разноязычные). Вот каким образом мне переводить в латиницу русские и болгарские буквы? Писать под каждый язык свой мнемонический траслитор? Чтобы работала обработка вида мои документы.doc = moi dokumenty.doc? Но если с русского на англ. еще куда ни шло, то с болгарского на англ. проблемнее перевести. А потом будут добавляться другие языки и получается надо под каждый язык писать мнемонический переводчик? А можно ли на одном windows english сервере хранить имена файлов на трех языках? :) на бред похоже но все-же может есть идеи... Какие еще могут быть варианты? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2007, 16:02 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
andron123А можно ли на одном windows english сервере хранить имена файлов на трех языках? :)Конечно можно и даже более того, только так и нужно. Переходи на unicode в именовании файлов и все проблемы исчезнут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2007, 17:41 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
andron123Нашел такой пример. Теперь не могу найти цифровой код кодировки utf-8, он вообще есть? Преобразование строки из одной кодировки в другую 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 ' use precomposed chars '=============Функция перекодировки=================== Public Function Convert(ByVal strSrc As String, ByVal nFromCP As Long, ByVal nToCP As Long) As String 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, MB_PRECOMPOSED, strSrc, nLen, strDst, nLen) nRet = WideCharToMultiByte(nToCP, 0, strDst, nRet, strRet, nLen * 2, ByVal 0, 0) Convert = Left(strRet, nRet) End Function Пример Имеем, допустим, TextBox. В нем текст в кодировке KOI, надо получить в Windows. Запускаешь: TextBox = StringConvert(TextBox, 20866, 1251) Значения для часто используемых кодировок: Central European (DOS) 852 Central European Alphabet (Windows) 1250 Central European Alphabet (ISO) 28592 Cyrillic Alphabet (DOS) 866 Cyrillic Alphabet (Windows) 1251 Cyrillic Alphabet (ISO) 28595 Cyrillic Alphabet (KOI8-R) 20866 Ukrainian Alphabet (KOI8-RU) 21866 Latin 3 Alphabet (ISO) 28593 Western Alphabet 1252 Baltic Alphabet (Windows) 1257 Baltic Alphabet (ISO) 28594 Greek Alphabet (Windows) 1253 Greek Alphabet (ISO) 28597 Turkish Alphabet 1254 Arabic Alphabet (Windows) 1256 Arabic Alphabet (ISO) 28596 Hebrew (DOS) 862 Hebrew Alphabet (Windows) 1255 Народ подскажите этот пример не работает с кодировкой utf8. что в одну так и в другую сторону. нашел пример перевода из utf8 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 18:12 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
Код: plaintext I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 11:39 |
|
||
|
как перекодировать имя файла
|
|||
|---|---|---|---|
|
#18+
HandKot Код: plaintext I Have Nine Lives You Have One Only THINK! Да та функция кодирует в одну сторону и обратно хорошо. Но попробуй перекодировать и з utf8 строку Добавление/удаление услуг Я ее взял из интернет экслорера (он ее переводит из одной кодировки в другую) Андрей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 12:53 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=210&tid=2163053]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
21ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 273ms |

| 0 / 0 |
