2013-01-10 19 views
2

我從iso-2022-jp的郵件服務器中獲取一個字符串,並且無法將其轉換爲UTF。在ruby中將iso-2022-jp轉換爲UTF格式

sub #=> "=?iso-2022-jp?Q?Auto-Asia-JP-1=1B$B$N$4M=3DLsFbMF$N3NG'=1B(B?=" 
sub.encoding #=> #<Encoding:US-ASCII> 

我試過使用Encoding :: Converter。

ec = Encoding::Converter.new("ISO-2022-JP", "UTF-8") 
ec.convert(sub) #=> "=?iso-2022-jp?Q?Auto-Asia-JP-1=1B$B$N$4M=3DLsFbMF$N3NG'=1B(B?=" 

我也試過把字符串的第一部分,字符串的最後部分以及它們之間的每個組合都放下。 Ruby認爲sub是ASCII,但是如果我試圖用force_encoding告訴它它是ISO-2022-JP,那麼它會吐出垃圾。

回答

6

該字符串是ascii:在發送之前,非ascii頭文件以ascii編碼,因此它們可以安全地通過只理解ascii的郵件服務器。 Q表示iso-2022字節使用quoted printable編碼。

的字節解碼被

Auto-Asia-JP-1=1B$B$N$4M=3DLsFbMF$N3NG'=1B(B 

紅寶石可以通過.unpack("M").first.gsub('_',' ')這將產生

Auto-Asia-JP-1\e$B$N$4M=LsFbMF$N3NG'\e(B 

解碼所引用的可打印如果然後該字符串做force_encoding('ISO-2022-JP').encode('UTF-8')我再拿到

Auto-Asia-JP-1のご予約內容の確認 

雖然我不會說日語,所以這可能是無稽之談。

您可能想要使用諸如郵件寶石之類的東西來進行調查,它瞭解所有關於郵件標題錯綜複雜的內容。

+0

最後的日語意思是「確認您在Auto-Asia-JP-1上的預訂」,因此它似乎被正確解碼。提問者與字符編碼和郵件頭編碼混淆。 – akky