सिर्फ इसलिए कि स्ट्रिंग यूटीएफ -8 होने का दावा करती है इसका मतलब यह नहीं है कि यह यूटीएफ -8 है। \xe9
é
. है में ISO-8859-1
(AKA लैटिन-1) लेकिन यह UTF-8 में अमान्य है; इसी तरह, \xf1
है ñ
ISO-8859-1 में लेकिन UTF-8 में अमान्य है। इससे पता चलता है कि स्ट्रिंग वास्तव में UTF-8 के बजाय ISO-8859-1 में एन्कोडेड है। आप इसे force_encoding
वर्तमान एन्कोडिंग और encode
इसे UTF-8 के रूप में फिर से एन्कोड करने के लिए:
> "Tweets en Ingl\xE9s y en Espa\xF1ol".force_encoding('iso-8859-1').encode('utf-8')
=> "Tweets en Inglés y en Español"
तो उस स्ट्रिंग को उस डेटाबेस में भेजने से पहले जिसे आप चाहते हैं:
name = name.force_encoding('iso-8859-1').encode('utf-8')
दुर्भाग्य से, स्ट्रिंग के वास्तविक एन्कोडिंग का विश्वसनीय रूप से पता लगाने का कोई तरीका नहीं है। विभिन्न एन्कोडिंग ओवरलैप होते हैं और यह बताने का कोई तरीका नहीं है कि क्या è
(\xe8
ISO-8859-1 में) या č
(\xe8
आईएसओ-8859-2 में) मैनुअल विवेक जांच के बिना सही चरित्र है।