Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2009, 16:22   #1
CradleOfSong
 
Регистрация: 01.06.2009
Сообщений: 5
По умолчанию Кодировка в ексель

Здравствуйте. Встречался ли кто из вас с таким случаем:
В таблице екселя есть ячейки с ссылками, ссылаются они на сайты с одинаковой кодировкой, но почему-то в ссылке на первый сайт все впорядке, а при переходе по ссылке на второй сайт почему то меняется кодировка в URL
Во вложении тестовый xml файлик, с образцами того как именно генерируются ссылки (ссылки ссылаются на сервисы яндекса. поиск и статистика поисковых запросов)

Если я не ошибаюсь, то в случае с второй страницей ексель отсылает данные в кодировке CP1251, но я не могу понять почему он вдруг сменил кодировку сам. И вообще где можно поменять кодировку для урл в екселе?
Вложения
Тип файла: zip test.zip (1.5 Кб, 15 просмотров)

Последний раз редактировалось CradleOfSong; 11.10.2009 в 17:02.
CradleOfSong вне форума Ответить с цитированием
Старый 11.10.2009, 16:58   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Что за странное вложение с пустым файлом
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 11.10.2009, 17:03   #3
CradleOfSong
 
Регистрация: 01.06.2009
Сообщений: 5
По умолчанию

прошу прощения. я перезалил.
CradleOfSong вне форума Ответить с цитированием
Старый 11.10.2009, 18:03   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Excel здесь не виноват.
Вы наберите эту ссылку в блокноте,и вставте в браузер,результат не изменится.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 11.10.2009, 18:17   #5
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте CradleOfSong.
"ссылаются они на сайты с одинаковой кодировкой..." - очевидно на страницы сайтов ?
"...почему то меняется кодировка в URL..." - URL (Uniform Resource Locator) не содержит информацию о кодировке, соответственно "...ексель отсылает данные в кодировке CP1251..." - Excel никому ничего не "отсылает", выполняется запрос по URL. И если CP "страницы сайта" явно не задана, может происходить подобное.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 11.10.2009, 18:47   #6
CradleOfSong
 
Регистрация: 01.06.2009
Сообщений: 5
По умолчанию

Да, урл не содержит информацию о кодировке, он содержит адрес страницы, который может быть закодирован любыми кодировками, цель которых убрать из адреса все не латинские символы, главное, что бы их понимал сервер.
Teslenko_EA, прошу прощения за столь грубые оскорбления в сторону екселя.

действительно, даже при правке текста ссылки в строке запроса и последующей отправки, все-равно вылазят эти иероглифы.

Еще раз прошу прощения за беспокойство. Буду пытаться решить эту проблему другими способами.
CradleOfSong вне форума Ответить с цитированием
Старый 11.10.2009, 19:08   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Проблема решается просто - надо добавить в книгу Excel пользовательскую функцию, которая преобразовывала бы Unicode (русский текст) в URLencode

Часа два искал в интернете подобную функцию - не нашел

Это и это не подходит.

Самостоятельно написать функцию не получилось.
Все испробованные функции в результате выполнения команды Debug.Print UrlEncode("тестик")
возвращают строку %F2%E5%F1%F2%E8%EA
а нужна строка %D1%82%D0%B5%D1%81%D1%82%D0%B8%D0%B A

Если кто сможет найти или написать такую функцию - было бы неплохо, мне бы она тоже пригодилась...
EducatedFool вне форума Ответить с цитированием
Старый 11.10.2009, 19:12   #8
CradleOfSong
 
Регистрация: 01.06.2009
Сообщений: 5
По умолчанию

EducatedFool, я попытаюсь решить этот вопрос с помощью маленького JS скрипта, если получится, то я отпишусь
CradleOfSong вне форума Ответить с цитированием
Старый 11.10.2009, 19:25   #9
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

У меня была похожая проблема, но как раз функция с первой ссылки EducatedFool'a у меня и используется в виде заготовки. Может, вам нужно немного другое? У меня такая функция, но я мог не так понять ваши потребности.
Код:
Public Function URLEncode_Ascii(ByVal plain_text As String) As String
Dim i As Long, ts As String, cur_char As Byte
Dim reserved_symbols_allowed As String, unreserved_symbols As String
Static flagTableInited As Boolean
Static ascii_map(0 To 255) As String

If Not flagTableInited Then
    ' Незарезервированные символы.
    ' Символы допустимые в URL
    unreserved_symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~абвгдеёжзийклмнопрстуфхцчшщьыъэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ"
    For i = 1 To Len(unreserved_symbols)
        ascii_map(Asc(Mid$(unreserved_symbols, i, 1))) = Mid$(unreserved_symbols, i, 1)
    Next i
    ' Зарезервированные символы: !*'();:@&=+$,/?%#[] и пробел
    ' Спецсимволы которые не должны появляться в URI.
    ' Но в зависимости от контекста некоторые из них могут быть разрешены и не должны быть закодированы
reserved_symbols_allowed = "абвгдеёжзийклмнопрстуфхцчшщьыъэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ"
    For i = 1 To Len(reserved_symbols_allowed)
        ascii_map(Asc(Mid$(reserved_symbols_allowed, i, 1))) = Mid$(reserved_symbols_allowed, i, 1)
          Next i
  
    ' Все остальные символы
    For i = 0 To 191
        If i < 16 Then
            ascii_map(i) = "%0" & Hex$(i)
        Else
            If Len(ascii_map(i)) = 0 Then ascii_map(i) = "%" & Hex$(i)
        End If
    Next i
    flagTableInited = True
End If

For i = 1 To Len(plain_text)
    ts = ts & ascii_map(Asc(Mid$(plain_text, i, 1)))
Next i

URLEncode_Ascii = ts

End Function
motorway вне форума Ответить с цитированием
Старый 11.10.2009, 20:09   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Написал я всё-таки эту функцию самостоятельно:

Код:
Function RussianStringToURLEncode(ByVal txt As String) As String
    For i = 1 To Len(txt)
        l = Mid(txt, i, 1)
        Select Case AscW(l)
            Case Is > 256: t = "%" & Hex(AscW(l) \ 64 + 192) & "%" & Hex(8 * 16 + AscW(l) Mod 64)
            Case 32: t = "+"
            Case Else: t = l
        End Select
        RussianStringToURLEncode = RussianStringToURLEncode & t
    Next
End Function
Вот что получилось:

EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильно ли я понимаю справку Ексель? Помогите! abdumanon Microsoft Office Excel 9 09.04.2009 19:36
Делфи + ексель AnnNet Общие вопросы Delphi 1 21.02.2009 00:10
Функции в Ексель Юра_ Microsoft Office Excel 5 16.12.2008 14:26
не могу открыть ексель Kakha Microsoft Office Excel 2 05.02.2008 22:33
Нужно найти последнюю строку в файле с информацией и узнать ее адрес Мефистофель Microsoft Office Excel 2 10.06.2007 16:03