Преобразование кодировки для большого файла - PullRequest
2 голосов
/ 08 июля 2011

Я столкнулся с большим (~ 18 ГБ) файлом, экспортированным из SQL Server в виде текстового файла Unicode, что означает его кодировку UTF-16 (little-endian). Файл теперь хранится на компьютере под управлением Linux, но я не нашел способа конвертировать его в UTF-8.

Сначала я попытался использовать iconv, но файл слишком велик для этого. Мой следующий подход заключался в использовании разделения и преобразования файлов один за другим, но это тоже не сработало - во время преобразований было много ошибок.

Итак, есть идеи о том, как преобразовать это в UTF-8? Любая помощь будет высоко ценится.

1 Ответ

4 голосов
/ 09 июля 2011

Поскольку вы используете сервер SQL, я предполагаю, что ваша платформа - Windows.В простейшем случае вы можете быстро написать грязное приложение .NET, которое построчно читает исходный код и записывает преобразованный файл по мере его поступления.Примерно так:

using System;
using System.IO;
using System.Text;

namespace UTFConv {
    class Program {
        static void Main(string[] args) {
            try {
                Encoding encSrc = Encoding.Unicode;
                Encoding encDst = Encoding.UTF8;
                uint lines = 0;
                using (StreamReader src = new StreamReader(args[0], encSrc)) {
                    using (StreamWriter dest = new StreamWriter(args[1], false, encDst)) {
                        string ln;
                        while ((ln = src.ReadLine()) != null) {
                            lines++;
                            dest.WriteLine(ln);
                        }
                    }
                }
                Console.WriteLine("Converted {0} lines", lines);
            } catch (Exception x) {
                Console.WriteLine("Problem converting the file: {0}", x.Message);
            }
        }
    }
}

Просто откройте Visual Studio, запустите новый проект консольного приложения C #, вставьте туда этот код, скомпилируйте и запустите его из командной строки.Первый аргумент - ваш исходный файл, второй аргумент - ваш конечный файл.Должно работать.

...