2015-03-24 4 views
0

У меня есть файл csv на сервере, закодированном как ANSI, и хотите открыть его, обработать и сохранить содержимое в базе данных. У меня бесконечные проблемы с акцентированным персонажем, как «à è ì ò ù», вместо этого «?».Открыть файл ANSI csv и прочитать содержимое как utf-8

Содержимое заголовка html устанавливается как utf-8. Это мой код

Response.CharSet = "UTF-8" 

... 

Set objStream = CreateObject("ADODB.Stream") 
objStream.Type = 2 
objStream.CharSet = "utf-8" 
objStream.Open 
objStream.Position = 0 
objStream.LoadFromFile(path) 

strData = objStream.ReadText() 
Response.write(strData) '<== just to see 

objStream.Close 
Set objStream = Nothing 

Сначала я использовал один объект FileSystem, но читал, что у него есть еще больше проблем обработки кодирования

+0

Возможно, [это] (http://stackoverflow.com/a/25685355/2861476) может помочь вам –

+0

Я пробовал. Сохраняет на сервере файл, отлично закодированный в utf8, причем все символы читаемы, но если я прочитаю его с помощью приведенного выше кода, он снова даст результаты как «Corposit ». Если я изменю параметры в objStream.CharSet = "unicode", он даст мне длинную строку "????????????" – Fehu

+0

Где вы видите неправильные данные, как в базе данных, так и в выводе 'Response'? –

ответ

1

Внутренне, VBScript строки UTF-16 в кодировке. Функции ввода-вывода, которые читаются, должны сообщаться/предполагать по умолчанию правильную кодировку источника для преобразования источника в UTF-16. Функция ввода-вывода, в которой должна быть указана запись/предполагать по умолчанию желаемую кодировку вывода для преобразования UTF-16 в нужную кодировку.

Если файл действительно (какой-то) ANSI, то ваш

objStream.CharSet = "utf-8" 

неправильно. Это должно быть имя кодировки (cpXXX, ISO_YYY, ZZZ), которую действительно использует ваш файл.

Вы тестировали с помощью FileSystemObject? Возможно, это угадает, и ваша проблема решена без дополнительных усилий.

+0

Сначала я попробовал FileSystemObject, но генерировал артефакты для одних и тех же символов. Я не очень сильно контролирую исходный файл, но теперь я использую CSV, сгенерированный с excel 2010 из таблицы excel. Я знаю, что это ansi только потому, что notepad ++ так говорит, я даже не знал, что существует несколько стандартов ansi: S – Fehu

+1

@Fehu - см. Http://stackoverflow.com/questions/701882/what-is-ansi-format. –

Смежные вопросы