MS Access VBA - как читать текст utf8 независимо от локали системы Windows - PullRequest
0 голосов
/ 24 октября 2018

У меня есть таблица MySQL с текстовым полем.Он содержит гиперссылку и кодируется в utf8 (utf8-unicode-ci collation).Я хочу открыть гиперссылку программно из VBA.

Текстовое поле может содержать символы типа «őűö», которых нет в западной европейской кодовой странице (1252), но доступно в центральной европейской (1250).

Моей первой попыткой было запуститьпроходной запрос, считайте значение поля в строку VBA и откройте его с помощью Application.Followhyperlink.Он работает, когда языковой стандарт Windows - кодовая страница по умолчанию для приложений, не поддерживающих Юникод, в региональных настройках - является венгерским (используется кодовая страница 1250), и не работает, когда языковой стандарт системы - немецкий (использует кодовую страницу 1252).Строка VBA содержит значение, преобразованное в кодовую страницу, указанную системным языком.Таким образом, «C: \ tükörtűrő» будет читаться как «C: \ tukorturo».

Мне не разрешено исправлять локаль системы на 100+ компьютерах.Итак, как это сделать правильно?


Редактировать:
Извлеченные уроки:
* Debug.Print не поддерживает Unicode - как сказал Эрик фон Асмут.Отображаемый текст в окне отладки вводит в заблуждение.
* Application.FollowHyperlink может обрабатывать Unicode.
* Настоящая проблема заключалась в проверке работоспособности ссылки непосредственно перед открытием ссылки, где я использовал встроенный GetAttr (),что зависит от настроек локали системы.Я заменил его на GetFileAttributesW (), теперь все работает.Некоторая заслуга идет здесь, чтобы Бонни Уэст.(https://www.planet -source-code.com / vb / scripts / ShowCode.asp? TxtCodeId = 74264 & lngWId = 1 )

1 Ответ

0 голосов
/ 24 октября 2018

VBA и Access используют UTF-16 для внутреннего использования, а не для системной кодовой страницы, так что это вообще не должно быть проблемой.Сквозные запросы должны просто работать.Однако:

  • Вам необходимо использовать драйвер MySQL Unicode, а не драйвер MySQL ANSI

  • Не все функции VBA поддерживают символы Unicode.Например, MsgBox является только ANSI и будет приводить недоступные символы либо к вопросительным знакам, либо к ближайшему эквивалентному символу ANSI.

  • Сам код VBA не является Unicode.Вы можете увидеть этот ответ , в котором описан подход для установки строк в символы, недоступные в кодовой странице, используемой VBA.

...