Показать сообщение отдельно
Старый 07.12.2013, 11:37   #39  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Добрый день!
Необходимо из Аксапты 3.0 SP3 выгружать csv файлы в UTF-8 кодировки.
1. Попробовал решение AndyD - в некоторых строках появились дополнительные кракозябры
2. Скачал внешний кодировщик , вызываю его кодом:

X++:
void encodeFile(str _path)
{
    ;
    WinAPI::shellExecute("recode", strFmt("-f cp1251...utf-8 %1", _path));
}
Файл кодируется в utf-8, но есть один недостаток - когда отрываю Notepad++ кодировка файла отображается как 'Ansi as UTF-8', и если в том же Notepad++ перекодировать файл в UTF-8 то размер файла изменится на 3 байта, как я понимаю - это в начало файла добавится BOM-символ.
Т.е. мой кодировщик recode кодирует в utf8_without_bom, а заказчику нужен чистый utf-8 c этим BOM-символом.

3. Пробую на C# написать перекодирование в UTF-8:
X++:
            FileStream fs = File.Open("E:\\data\\1\\test2.txt", FileMode.Open);            
            StreamReader sr = new StreamReader(fs, Encoding.Default);
            string asciText = sr.ReadToEnd();
            FileStream fsw = File.OpenWrite(@"E:\\data\\1\\test4.txt");
            Byte[] info = new UTF8Encoding(true).GetBytes(asciText);
            fsw.Write(info, 0, info.Length);
И опять файл кодируется без BOM символа (Notepad++ определяет кодировку файла как 'Ansi as UTF-8')

Не подскажете как получить файл в кодировке UTF-8 with BOM (просто UTF-8 по мнению Notepad++)?