Burada db dışında bir dize var ãƒ\u008F
ve ben onu unicode karakterine geri dönüştürmek istiyorum. Db'nin windows-1252
kodlamasını kullandığını biliyorum, bu yüzden asıl karakter, utf-8 kodlamasında ハ
olan \xe3\x83\x8f
olmalıdır. 0x8f
windows-1252
'ın kod sayfasında tanımlanmamış beriTanımlanmamış karakterleri korurken kodlama
Burada, şimdiye kadar
"ãƒ\u008F".encode('windows-1252')
# => Encoding::UndefinedConversionError: U+008F to WINDOWS-1252 in conversion from UTF-8 to WINDOWS-1252
"ãƒ\u008F".encode('windows-1252', undef: :replace)
# => "\xE3\x83?"
Bu makul denedim şeylerdir.
----------Windows-1252-----------
0 1 2 3 4 5 6 7 8 9 a b c d e f
2 ! " # $ % & ' () * + , - ./
3 0 1 2 3 4 5 6 7 8 9 : ; <=> ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ]^_
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~
8 € � ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ � Ž � <---right here!
9 � ‘ ’ “ ” • – — ˜ ™ š › œ � ž Ÿ
a ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯
b ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿
c À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
d Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
e à á â ã ä å æ ç è é ê ë ì í î ï
f ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ
Benim sorum şu ki, tanımsız karakteri korurken nasıl kodlayabilirim? Yani, nasıl ben burada ne olup bittiğini belli belirsiz bir fikrim var
s = "ãƒ\u008F".some_magic_methods
# => "\xE3\x83\x8F"
s.force_encoding('utf-8')
# => "ハ"
İşaret ediyorsunuz? genellikle geçersiz olan karakter yazın. Orada [Windows-1252'de böyle bir karakter yok] (https://en.wikipedia.org/wiki/Windows-1252), yani bunu kodlamak bir hatadır. Neden force_encoding' kullanılmıyor? – tadman
Dizge zaten UTF-8 gösterimi için doğru baytlara sahipse, çözüm (@tadman'ın dediği gibi), str.force_encoding ('utf-8') 'yapmak içindir. Bu gerekli olan her şey. Gerçek baytlar zaten doğruysa 'encode 'kullanmamalısınız. –
@Jordan, sorun şu ki, dizenin temsili "ム\ u008F", "" ム\ u008F ".force_encoding ('utf-8')' hala 'ム\ u008F' – sbs