2011-11-19 47 views
2

我正在解析wikipedia上的一些圖像鏈接。我碰到這一個http://en.wikipedia.org/wiki/Special:Export/Diego_Forl%C3%A1n爲什麼默認不推薦使用java.net.URLEncoder.encode,但在指定字符集時不能使用?

當我使用不推薦的URLEncoder.encode,我可以正確地編碼重音字符,但是當我指定「UTF-8」參數時,它失敗。維基百科上的文字是utf8 AFAIK。 Diego + Forl%E2%88%9A%C2%B0n + vs + the + Netherlands.jpg是不正確的。

scala> first 
res24: String = Diego Forlán vs the Netherlands.jpg 

scala> java.net.URLEncoder.encode(first, "UTF-8") 
res25: java.lang.String = Diego+Forl%E2%88%9A%C2%B0n+vs+the+Netherlands.jpg 

scala> java.net.URLEncoder.encode(first) 
<console>:33: warning: method encode in object URLEncoder is deprecated: see corresponding Javadoc for more information. 
       java.net.URLEncoder.encode(first) 
           ^
res26: java.lang.String = Diego+Forl%C3%A1n+vs+the+Netherlands.jpg 
+0

工作正常的Java 1.6.0_27-B07 –

+0

使用OS X獅子(建立1.6.0_26-b03-383-11A511c) –

+0

什麼不工作有關的結果呢?你沒有指出它是不正確的。 UTF-8中的重音字符通常是多字節。對這些多個字節進行編碼的URL將以第二種情況下的類似結果爲結尾。 –

回答

1

我猜想,first已經損壞,只能正確渲染因譯碼錯誤的控制檯配置隱藏。

您可以通過發射字符串中的UTF-16代碼單元證實了這一點:

for(c<-first.toCharArray()){print("\\u%04x".format(c.toInt))} 

有可能是編寫一個更優雅的方式。

如果碼點被正確編碼,這將是:

U+00e1  á  \u00e1 

我期望某處UTF-8編碼的數據正被使用的MacRoman解碼器解碼。

codepoint glyph escaped x-MacRoman  info 
======================================================================= 
U+221a  √  \u221a  c3,   MATHEMATICAL_OPERATORS, MATH_SYMBOL 
U+00b0  °  \u00b0  a1,   LATIN_1_SUPPLEMENT, OTHER_SYMBOL 
+0

感謝您的調試技巧 –

相關問題