\u008E
コードポイント (16 進数)を持つ Unicode 文字が8e
文字列内のその位置に現れることを意味します。この文字は、制御文字「SINGLE SHIFT TWO」です (コード表 (pdf)を参照)。文字Ž
は codepoint にありu017d
ます。ただし、 Windows CP-1252エンコーディングの位置8e
にあります。どういうわけか、エンコーディングが混同されています。
これを「修正」する最も簡単な方法は、文字列 (またはデータベース レコードなど) を含むファイルを開き、正しくなるように編集することです。実際の解決策は、問題の文字列がどこから来たか、および問題のある文字列がいくつあるかによって異なります。
文字列がUTF-8 エンコーディングであると仮定すると、 は\u008E
と の 2 バイトc2
で構成されます8e
。2 番目のバイト は、CP-12528e
の のエンコーディングと同じであることに注意してください。Ž
文字列を変換する途中で、次のようになります。
string3.force_encoding('BINARY') # treat the string just as bytes for now
string3.gsub!(/\xC2/n, '') # remove the C2 byte
string3.force_encoding('CP1252') # give the string the correct encoding
string3.encode('UTF-8') # convert to the desired encoding
これは、このようなすべての問題を修正するための一般的な解決策ではないことに注意してください。すべての CP-1252 文字がマングルされ、UTF-8 でこのように表現された場合、このような変換に適しているわけではありません。正しいバイト (この場合のように)c2 xx
が2 バイトになるものもあれば、別のバイトになるものもあります。xx
c3 yy
yy