Ruby對UTF-8字符串不會很好。我將數據傳遞給XML文件,儘管XML文檔被指定爲UTF-8,但它將ascii編碼(每個字符兩個字節)視爲單個字符。Ruby:將編碼字符轉換爲實際的UTF-8字符
我已經開始以'\ uXXXX'格式對輸入字符串進行編碼,但我無法弄清楚如何將其轉換爲實際的UTF-8字符。我一直在搜索這個網站和谷歌無濟於事,我的沮喪現在非常高。我正在使用Ruby 1.8.6
基本上,我想轉換字符串'\ u03a3' - >「Σ」。
我有什麼是:
data.gsub /\\u([a-zA-Z0-9]{4})/, $1.hex.to_i.chr
這當然給了 「931出焦範圍」 的錯誤。
謝謝 添
請注意,UTF-8不是每個字符兩個字節。它是每個代碼點1到4個字節。如果你的gsub工作,輸出將不是UTF-8 - 它可能更接近於UCS-2或UTF-32,這取決於數字的大小。 – hrnt 2009-11-16 22:41:01
我的答案是放棄Ruby。我在.NET中重寫了這段代碼,因爲我沒有時間繼續嘗試使用Ruby。我升級到1.9.1,其中不包括運行所需的大量DLL。添加完這些後,結果發現許多寶石在1.9。*版中被破壞,因爲它們使用硬編碼1.8。* DLL的二進制gem格式。最終腳本如下所示: data.gsub(/ \\ u [a-zA-Z0-9] {4} /){| s | eval('''+ s +''')} 這在1.9。*中很完美,但由於它不運行寶石,我需要我需要去其他地方看看。 – 2009-11-17 15:54:54