2016-02-04 31 views
0

我是Python程序員(當然我現在也是),所以我對Python的編碼和解碼很熟悉。
如何對字符串進行兩次編碼?

我很驚訝Java可以連續兩次編碼字符串變量。

這是示例代碼:

import java.net.URLEncoder; 

public class OpenAPITest { 
    public static void main(String[] arg) throws Exception { 
     String str = "안녕"; // Korean 
     String utfStr = URLEncoder.encode(str, "UTF-8"); 
     System.out.println(utfStr); 
     String ms949Str = URLEncoder.encode(utfStr, "MS949"); 
     System.out.println(ms949Str); 
    } 
} 

我不知道它是如何編碼字符串的兩倍。

在Python 3.x版本中,一旦你編碼了type 'str'它由unicode字符串組成,那麼它轉換爲type 'byte',它由字節串組成。 type 'byte'只有decode()功能。

此外,我想在Python3中得到相同的字符串值作爲我的示例代碼中的ms949Str的結果值。請給我一些建議。謝謝。

+1

什麼是你的問題? – scottb

+0

@scottb在JAVA中如何連續兩次對String進行編碼? – user3595632

+0

旁註:「兩次」是指「兩次」。因此,「兩倍」是多餘的 –

回答

2

不知道Python,除了你沒有說出你使用的Python方法,但是如果Python方法將Python字符串轉換爲UTF-8字節序列,那麼你在這裏使用了錯誤的轉換方法,因爲這與無關。網址編碼。

str.getBytes("UTF-8")將返回一個byte[]與編碼在UTF-8中的Java字符串。

new String(bytes, "UTF-8")將解碼字節數組。


URL編碼是關於如何將文本轉換爲字符串,它是一個完整的URL的組件有效,這意味着所有的特殊字符必須使用%NN逃逸進行編碼。非ASCII字符也必須進行編碼。

舉一個例子,取字符串Test & gehört。當URL編碼,就變成了下面字符串

Test+%26+geh%C3%B6rt 

字符串Test & gehört成爲字節下列順序(十六進制顯示)與getBytes當用於

54 65 73 74 20 26 20 67 65 68 c3 b6 72 74 
+0

不知道Java,但'str.getBytes('utf-8')'和'URLEncoder.encode(str,「UTF-8」)'有什麼區別?我認爲這兩個函數作爲轉換字符串爲'utf-8'編碼的字節值,對不對? – user3595632

+0

你也可以使用apache labrary的Base64類對字符串進行編碼。 – Musaddique

+0

@ user3595632 URL編碼做了很多*更多*只是UTF-8編碼。它逃避了**網址**有特殊含義的字符。除非您一次專門構建一個URL組件,否則URL編碼不適用於您。URL「編碼」/轉義類似於XML編碼/轉義,其中'&'等特殊字符編碼爲'&'。在編碼爲'%26'的URL編碼中,你可以在答案中看到。這些編碼與UTF-8無關。 – Andreas

相關問題