2014-02-11 36 views
2

"\u5546\u54c1\u7f16\u53f7"顯示爲"商品編號"如何將「商品編號」轉換爲「 u5546 u54c1 u7f16 u53f7」

"\u5546\u54c1\u7f16\u53f7" # => "商品編號" 

什麼是"\u5546\u54c1\u7f16\u53f7"中的字符編碼?我怎麼能把"商品編號"轉換成"\u5546\u54c1\u7f16\u53f7"

+0

HEI,你有什麼問題。問題是如何轉換,是不是顯示 –

+2

你不能將''商品編號''轉換爲'「\ u5546 \ u54c1 \ u7f16 \ u53f7」'因爲是相同的字符串,第二個只是視覺表示首先。 –

+0

注意:「\ u5546 \ u54c1 \ u7f16 \ u53f7」中的字符編碼是什麼?有一個答案:「任何支持Unicode的編碼,但默認情況下在Ruby中可能是UTF-8」。這是因爲你所看到的*本身不是一種編碼,而是一種使用轉義序列的方便表示。要找到正在使用的編碼,您可以編寫''\ u5546 \ u54c1 \ u7f16 \ u53f7「.encoding',但請注意轉義序列在Ruby支持的所有基於Unicode的編碼中看起來完全相同。 –

回答

4

\uHHHH(其中HHHH是十六進制)表示法只是一種通過數字引用Unicode字符的方法。通常在以下情況下使用:

  1. 您不知道如何從鍵盤中取出之類的內容。
  2. 您正在一個無法顯示所需的所有Unicode的環境中工作。

當你說"\u5546\u54c1\u7f16\u53f7"和看到"商品編號",它只是意味着你正在一個現代的終端是Unicode的意識,並具有良好的字體。

在大多數情況下,應該使用哪種表示形式,它最終會以機器內部相同的字節結束。但是,如果你必須得到\u版本出於某種原因,那麼你可以說這樣的事情(假設你的編碼開出右側):

ascii_friendly = str.chars.map { |c| '\u%4.4x' % c.ord }.join 

然後,當你打印ascii_friendly到屏幕,文件,或說一個JSON流,你會看到像

\u5546\u54c1\u7f16\u53f7 

注意的事情是,在\u5546不存在單一的Unicode ,它是六個字符\u5546。如果您的目標是JSON,那麼在解析JSON時將正確解釋\u轉義碼,但如果您的目標是其他任何內容,則只會看到六個字符,而不是您要查找的單個Unicode字符。

+0

非常感謝! –

+0

@ 2g。畝太短可能會更好地解釋它,我不反對這是一個很好的答案,但它說的和我的答案一樣,以及МалъСкрылевъ的評論。 – sawa

+0

@sawa。好吧!請原諒我。 –