2013-10-27 31 views
2

我正在學習ruby並嘗試從ftp服務器獲取文件名。我得到的字符串進行編碼在GB2312(簡體中國),它在大多數情況下,這些代碼的成功:無法在ruby1.9.3中將「[」與編碼「gb2312」轉換爲「utf-8」

str = str.force_encoding("gb2312") 
str = str.encode("utf-8") 

但如果字符串包含符號"[""【"它將使一個錯誤"in encode': "\xFD" followed by "\x88" on GB2312 (Encoding::InvalidByteSequenceError)"

回答

0

Ruby編碼允許很多反思。這樣一來,你可以找到相當不錯,如何處理特定的字符串:

"【".encoding 
=> #<Encoding:UTF-8> 
"【".valid_encoding? 
=> true 
"【".force_encoding("gb2312").valid_encoding? 
=> false 

這表明,這個人物是沒有用給定字符集!如果您需要改造所有的字符,你可以使用encode方法,並提供缺省值或更換,像這樣不確定的字符:

"【".encode("gb2312", invalid: :replace, undef: :replace) 
=> "\x{A1BE}" 

如果您有有混合字符編碼字符串,你幾乎搞砸了。沒有很多猜測就沒有辦法找出答案。

+0

謝謝。現在我不怕我的英語。哈哈 – mydting