2014-04-16 18 views
1

我正在研究ruby腳本(使用續集)將數據從舊數據庫傳輸到新數據庫。由於舊數據庫的編碼問題,我得到的值是「München」而不是「München」。在ruby腳本中修復從數據庫中打亂的變音符號

DB = Sequel.mysql2 'db_name', user: 'name', password: '***', host: '127.0.0.1' # , encoding: Encoding::CP1252.name) # doesn't work 
city = DB[:users].first['city'] # => "München" 
city.encoding # => #<Encoding:UTF-8> 
city.encode(Encoding::UTF_8, Encoding::CP1252) # => "München" 

舊的數據庫的編碼設置爲CP1252,新的一個是utf-8。

我試圖#gsub破碎的變音,但是,這並不工作:

umlauts = { 
'ä' => 'ä', 
'ö' => 'ö', 
'ü' => 'ü', 
'ß' => 'ß' 
} 

city.gsub(/[#{umlauts.keys.join}]/, umlauts) # => "Mnchen" 

我完全無能如何正確地與編碼工作,你知道我如何能得到「慕尼黑」?

+1

是什麼原因沒有你GSUB工作?我的工作很好:'string =「München」; string.gsub(「ü」,「ü」); =>「München」' –

回答

1

原來我用#gsub的方式已經錯了(!感謝麥克H-R),這個工程:

umlauts = { 
    'ä' => 'ä', 
    'ö' => 'ö', 
    'ü' => 'ü', 
    'ß' => 'ß' 
} 

city.gsub(/#{umlauts.keys.join("|")}/, umlauts)' # => "München" 
相關問題