Сохранить CSV с кодировкой UTF-8 при экспорте с помощью SQL Server Management Studio 2005

Я пытаюсь экспортировать файл CSV с помощью SQL Server Management Studio 2005, и я попытался нажать кнопку раскрывающегося списка рядом с «Сохранить» и выбрать кодировку UTF, но он все еще сохраняется как кодировка UCS-2 с прямым порядком байтов.

Возможно ли иметь его в кодировке UTF-8 без необходимости открывать с помощью Notepad ++ и сохранять как UTF-8? Дополнительный шаг и все.


person GotaloveCode    schedule 05.05.2014    source источник


Ответы (2)


поскольку мне нужно было приложение, чтобы сделать это для меня, я использовал vb, чтобы сделать это, используя следующие ссылки help http://www.vbnettutorial.net/?Id=119&Desc=Export-CSV-from-Dataset Как программно экспортировать CSV-файл на основе SQL-запроса

person GotaloveCode    schedule 07.05.2014

Поскольку MS SQL Server выводит только кодировку UCS-2 Little Endian или ASII, вы можете использовать bcp для вызова небольшой программы C # для преобразования ее в UTF-8.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UCS2toUTF8
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.WriteLine("exampe: UCS2toUTF8 [filepath]");
                return;
            }

            var filename = args[0];

            var filestream = File.OpenRead(filename);

            var BOM = new byte[3];

            filestream.Read(BOM, 0, BOM.Length);

            if (BOM[0] != (byte)255 && BOM[1] != (byte)254 ) //0xff 0xfe 0x48
            {
                Console.WriteLine("This isn't UCS-2LE");
                return;
            }else if (BOM[0] == 0xEF && BOM[1] == 0xBB && BOM[2] == 0xBF)
            {
                Console.WriteLine("This is UTF-8");
                return;
            }

            filestream.Close();

            byte[] content = File.ReadAllBytes(filename);

            byte[] utf8Bytes = System.Text.Encoding.Convert(System.Text.Encoding.Unicode, System.Text.Encoding.UTF8, content);

            byte[] newArray = new byte[utf8Bytes.Length - 3];

            Array.Copy(utf8Bytes, 3, newArray, 0, newArray.Length);

            File.WriteAllBytes(filename, newArray);
        }
    }
}

Обратите внимание, что если вы хотите использовать UTF-8 со спецификацией, вам необходимо внести некоторые изменения.

person King Chun O    schedule 10.07.2015