2

ruby を学んでおり、ftp サーバーからファイル名を取得しようとしています。取得した文字列はgb2312(簡体字中国語)でエンコードされています。ほとんどの場合、これらのコードで成功します:

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

ただし"in encode': "\xFD" followed by "\x88" on GB2312 (Encoding::InvalidByteSequenceError)"、文字列に記号"["または"【".

4

1 に答える 1

1

Ruby エンコーディングでは、多くのイントロスペクションが可能です。そうすれば、特定の文字列を処理する方法をかなりよく見つけることができます。

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

これは、この文字が指定された文字セットにないことを示しています! これらすべての文字を変換する必要がある場合は、encodeメソッドを使用してデフォルトを指定するか、未定義の文字を次のように置き換えることができます。

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

文字エンコーディングが混在する文字列がある場合、かなり面倒です。たくさんの推測なしに見つける方法はありません。

于 2013-10-27T14:12:31.483 に答える