2013-12-20 26 views
0

字符串Pépé的長度在Chrome中爲6個字符,但在Safari中爲4個字符。爲了確定這一點,我打開兩個瀏覽器的控制檯,然後輸入以下代碼:Safari使用不同於Chrome的重音符號對字符串進行編碼

"Pépé".length 

這種差異是給我在服務器端的麻煩。

我正在使用jQuery。$ ajax發送包含字符串Pépé的數據的POST請求。當數據到達服務器時,它將以不同的方式處理這些值。我可以在Chrome中獲取數據,但不能在Safari中獲取數據。

在ajax請求中,我設置了參數contentType: application/json; charset=utf-8

在服務器端,當執行來自Safari的POST請求時,看起來像P√©p√©,當從Chrome執行POST請求時看起來像PeÃÅpeÃÅ

任何線索爲什麼瀏覽器之間有區別?

回答

0

您可能會遇到不同的「標準化」,因爲這些口音等可以用不同的方式變成UTF-8。

有一個非常好的討論,在這裏的答案:

What is normalized UTF-8 all about?

這個答案在堆棧溢出的PHP部分,Java有操縱UTF-8的過類似的方法。瀏覽器可能會發送UTF-8如何發送它。在服務器端,您可能需要將所有數據標準化爲NFD或NFC。

我只是強迫一切到NFC服務器端。如果你是在Java中這樣的事情可以做:

http://docs.oracle.com/javase/6/docs/api/java/text/Normalizer.html

編輯: 在所有情況下的字節長度和字符長度將取決於正常化,也將嚴格的比較 - 無論編程語言。

相關問題