Иностранные персонажи появляются как????? в VBA 2003 как настроить UTF-8?
У меня есть база данных в Access 2003, которая должна работать с символами иностранного языка. Символы хорошо отображаются в таблице. Однако, когда VBA пытается прочитать их, он не может этого сделать.
Например, столбец ANSWER_TEXT из cf_Answer отображает: 佛吉尼亞海灘
Но выбор оператора в VBA:
sqlstmt = "SELECT ANSWER_TEXT AS ans_text FROM cf_Answer"
Set rst_a = dbs.OpenRecordset(sqlstmt, dbOpenSnapshot)
rst_a![ans_text]
возвращается ??????
,
Я знаю, что это как-то связано с кодировкой UTF-8, но я не могу найти способ установить это. Есть ли способ установить его в таблице? В настоящее время ANSWER_TEXT имеет тип данных memo
, Или, может быть, есть способ настроить VBA для понимания этих символов?
Может ли кто-нибудь хотя бы указать мне правильное направление?
1 ответ
Проблема может быть связана с тем, где вы отображаете этот текст в Unicode.
Я вставил те же символы в текстовое поле в моей таблице. Получение их с DLookup
в окне "Немедленно" заставляет их отображаться в виде вопросительных знаков, потому что окно "Немедленно" не отображает юникод, как вы хотите.
? DLookup("some_text", "tblFoo", "id = 1")
??????
MsgBox
также отображает их в виде вопросительных знаков.
MsgBox DLookup("some_text", "tblFoo", "id = 1")
Однако элемент управления текстового поля формы имеет возможность правильно обрабатывать юникод. Привязка текстового поля к полю, содержащему эти символы, дает мне это...
Запрос также может ссылаться на символы Юникода, и он использует один в своем WHERE
и правильно отображает их все при открытии запроса в представлении таблицы.
SELECT f.id, f.some_text
FROM tblFoo AS f
WHERE (((f.some_text) Like '佛*'));
Я подозреваю, что все это сводится к тому, как вы пытаетесь использовать эти символы Юникода и где вы их отображаете.
В комментарии вы указали, что запись этих символов юникода в текстовый файл приведет к появлению только вопросительных знаков. Тем не менее, если вы запишите Unicode в текстовый файл (как в процедуре ниже) и отобразите файл в редакторе, который способен правильно обрабатывать Unicode, вы увидите те же символы, что и в Datasheet View таблицы, в которой они хранятся, Этот снимок экрана показывает Wordpad, открытый с файлом, который был создан из кода ниже.
Dim objFso As Scripting.FileSystemObject
Dim objFile As Scripting.TextStream
Set objFso = New Scripting.FileSystemObject
Set objFile = objFso.OpenTextFile(CurrentProject.Path & _
Chr(92) & "unicode.txt", ForWriting, True, TristateTrue)
objFile.Write DLookup("some_text", "tblFoo", "id = 1")
objFile.Close
Set objFile = Nothing
Set objFso = Nothing