2014-10-31 60 views
0

我從python服務器得到答覆基本上我在做什麼是發送文章和python代碼發送給我重要的標籤在文章中。我得到的回覆是這樣的PHP UTF8解碼不工作出來從python返回

"keywords": "[u'Smartphone', u'Abmessung', u'Geh\xe4userand']" 

,所以我想爲utf8解碼的GEH \ xe4userand字符串。我讀過一些文章,我必須把它放在「」,然後做解碼,但它不起作用。我的代碼是

$tags = str_replace("'",'"',$tags); 
$tags = preg_replace('/\[*\s*u(".*?")\]*/', "$1", $tags); 
$tags = explode(',', $tags); 
    foreach ($tags as $tag) { 
     pr(utf8_encode($tag)); 
    } 
    die; 

我得到的輸出是

<pre>"Smartphone"</pre><pre>"Abmessung"</pre><pre>"Geh\xe4userand"</pre> 

我沒有訪問Python代碼。

+4

修復Python代碼;它會向您發送帶有Unicode轉義符的Python列表文字,而不是UTF8。它應該向您發送JSON,而非最有可能的。 '\ xe4'字符序列對代碼點U + 00E4進行編碼,但是它是4個文字ASCII字符。 – 2014-10-31 11:48:13

+1

如果您無法修復Python代碼,則必須翻譯所有'\ xhh' 2-hex代碼才能將它們映射到Latin-1代碼點。任何'\ uhhhh'四位十六進制代碼都是Unicode代碼點,'\ Uhhhhhhh'八位十六進制代碼點用於BMP之外的Unicode代碼點,然後是'\ n','\ r'和'\ t'轉義代碼換行符,回車符和製表符。 – 2014-10-31 11:50:49

+0

用適當的字符替換了十六進制,因爲改變python代碼不會很快發生。 thanx @Martijn Pieters – Rohan 2014-10-31 12:31:10

回答

1

如果可行,請修改Python代碼;它會向您發送帶有Unicode轉義符的Python列表文字,而不是UTF8。理想情況下,它應該向您發送JSON。

\xe4字符序列編碼碼點U + 00E4,但它是使用4個文字的ASCII字符(\xe4)。

其他Python字面規則:

  • 它會使用單引號或雙引號,這取決於內容,用單引號的偏好。因此你可能不得不處理逃脫的\'單引號。
  • 換行符,回車符和製表符分別轉義爲\n\r\t
  • 所有其他不可打印的Latin-1字符都轉義爲\xhh,這是一個兩位十六進制編碼的編碼。
  • 如果文字以u開頭,它是一個Unicode字符串,而不是一個字節字符串,並且任何Latin-1子集外部但基本多語言平面的一部分的代碼點被轉義爲\uhhhh,該代碼點的四位十六進制編碼在U + 0100到U + FFFF的範圍內
  • 在Unicode字符串中,您還可以找到\Uhhhhhhhh,8位十六進制編碼的非BMP unicode碼點,範圍爲U + 00010000到U + 0001FFFF。