2010-07-26 4 views
2

У меня есть некоторые данные utf8, которые я хотел бы вставить в объемную вставку (sql server 2005). Я использую CODEPAGE 65001:UTF8 проблема sql server

BULK INSERT #bla 
FROM 'D:\bla.txt' 
WITH 
( 
    CODEPAGE=65001, 
    FIELDTERMINATOR = '\t', 
    ROWTERMINATOR = '\n' 
) 

Unfortunatly строк, как это:

Erdağı

в конечном итоге, хранящуюся так:

ERDA ??

Использовать ли неправильную кодовую страницу? Есть ли что-нибудь еще, что я могу сделать?

Спасибо.

Christian

+0

Как уверены, являются ли вы, что это * действительно * а UTF-8 файл? И как вы смотрите на сохраненные данные? См. Http://csharpindepth.com/Articles/General/DebuggingUnicode.aspx для общего подхода к этому. –

+0

Это источник данных: http://www.world-gazetteer.com/wg.php?x=&men=stdl&lng=en&des=wg&srt=npan&col=abcdefghinoq&msz=1500 говорят, что это UTF 8, и я вижу правильные строка в UniRed – cs0815

ответ

3

Согласно this link, "SQL Server не поддерживает кодовую страницу 65001 (UTF-8 кодировки)." Во-первых, я думал, что это связано только с 2008 годом, но, согласно ответам технического писателя Microsoft на вопрос о this link, «SQL Server никогда не поддерживал кодовую страницу 65001 (кодировка UTF-8)».

+1

Интересно и очень неутешительно. Я изначально получил кодовую страницу с одного из этих сайтов - они, должно быть, что-то изменили. Вы знаете о работе? – cs0815

+0

Извините, но я не знаю, как работать. –

+0

Похоже, UCS-2 и вы можете перевести UTF8 на UCS-2. Кто-нибудь сделал это успешно? – cs0815

0

Вы можете использовать C# для решения этой проблемы:

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

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

      var filename = args[0]; 

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

      byte[] newArray = new byte[content.Length + 3]; 

      newArray[0] = (byte)0xEF; 
      newArray[1] = (byte)0xBB; 
      newArray[2] = (byte)0xBF; 

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

      byte[] utcs2Bytes = System.Text.Encoding.Convert(System.Text.Encoding.UTF8, System.Text.Encoding.Unicode, newArray); 

      File.WriteAllBytes(filename, utcs2Bytes); 
     } 
    } 
} 
Смежные вопросы