私はruby-gemの続編を使用して、MSSQL-Serverテーブルからutf-8でエンコードされたデータを読み取ります。表のフィールドは次のように定義されnvarchar
ています。MicrosoftServerManagementStudioでは正しく表示されます(キリル文字はキリル文字で、中国語は中国語に見えます)。
データベースを
db = Sequel.connect(
:adapter=>'ado',
:host =>connectiondata[:server],
:database=>connectiondata[:dsn],
#Login via SSO
)
sel = db[:TEXTE].filter(:language=> 'EN')
sel.each{|data|
data.each{|key, val|
puts "#{val.encoding}: #{val.inspect}" #-> CP850: ....
puts val.encode('utf-8')
}
}
これは英語では問題なく機能し、ドイツ語でも使用可能な結果が返されます。
CP850: "(2 St\x81ck) f\x81r
(2 Stück) für ...
ただし、結果はに変換されCP850
、元のではありませんUTF-8
。
キリル文字(私はブルガリア語でテストしました)と中国語は「?」のみを生成します CP850
(中国語とブルガリア語の文字が含まれていないため、合理的です)。
また、odbc-connectionを介して接続しました。
db = Sequel.odbc(odbckey,
:db_type => 'mssql', #necessary
#:encoding => 'utf-8', #Only MySQL-Adapter
)
結果はASCII-8BIT
、データforce_encoding
をCP1252(CP850ではありません!)に変換する必要があります。しかし、キリル文字と中国語はまだ不可能です。
私がすでに試したこと:
- MySQLアダプターにはエンコードオプションがあるようですが、MSSQLでは効果が検出されませんでした。
- sqliteとsequelで同様のテストを行いましたが、Unicodeでは問題ありませんでした。
- インストール
SQLNCLI10.dll
してプロバイダーとして使用しました。しかし、無効な接続文字列属性-errorを取得します(と同じsqlncli
)。
だから私の最後の質問:ルビーと続編を介してMS-SQLでUTF-8データを読み取るにはどうすればよいですか?
私の環境:
クライアント:
- Windows 7
- Ruby 1.9.2
- 続編-3.33.0
データベース:
- SQL Server 2005
- データベースには照合がありますLatin1_General_CI_AS
質問を準備した後、私は解決策を見つけました。回答として投稿します。しかし、私はまだ願っています、より良い方法があります。