У меня очень сложная проблема, которую трудно объяснить должным образом. В интернете много дискуссий по этому поводу, но ничего конкретного. Любая помощь или лучшее объяснение, чем мое, очень приветствуется.
По сути, я просто пытаюсь написать файл XML, используя UTF-16 с VBA.
Если я сделаю это:
sXML = "<?xml version='1.0' encoding='utf-8'?>"
sXML = sXML & rest_of_xml_document
Print #iFile, sXML
затем я получаю файл, который является допустимым XML. Однако, если я изменю "encoding=" на "utf-16", я получу эту ошибку от моего валидатора XML:
Switch from current encoding to specified encoding not supported.
Поиск в Google говорит мне, что это означает, что атрибут кодировки xml отличается от АКТУАЛЬНОЙ кодировки, используемой файлом, поэтому я должен создавать документ utf-8 с помощью команд Open и Print.
Если я сделаю что-то вроде:
With CreateObject("ADODB.Stream")
.Type = 2
.Charset = "utf-16"
.Open
.WriteText sXML
.SaveToFile sFilename, 2
.Close
End With
затем я получаю несколько странных символов (BOM) в начале моего файла, что приводит к сбою проверки XML.
Если я открою файл в Notepad++, удалю спецификацию и изменю кодировку на «UCS-2», то файл будет проверен со значением кодировки «utf-16» (это означает, что UCS-2 достаточно близок к UTF-16, что неважно, или что XML умеет Switch from current encoding
между этими двумя типами.
Мне нужно использовать UTF-16, потому что UTF-8 не охватывает все символы, используемые в презентациях, которые я экспортирую.
Вопрос:
Как заставить VBA вести себя как Notepad++, создавая текстовый файл в кодировке UTF-16 без спецификации, который можно заполнить данными XML? ЛЮБАЯ помощь высоко ценится!
.Charset = "utf-16le"
? - person martin clayton   schedule 01.02.2012