2012-03-01 71 views
3

爲什麼{HTML, 「доуч」 ++ [1076,1086,1091,1095]}的yaws在頁面給我一個錯誤:雅司統一符號{HTML,...}

Yaws process died: {badarg,[{erlang,list_to_binary, 
            [[[[208,180,208,190,209,131,209,135,1076, 
             1086,1091,1095]], 
             ... 

「 доуч「= [1076,1086,1091,1095] - >給了我完全匹配,但是yaws如何翻譯2個字節的每個元素列表,其長度爲兩倍長,每個元素爲1個字節,用於」доуч「,但不是用於[ 1076,1086,1091,1095。是否有一些內部repicintation unicode數據involed?

我想輸出到像[1076,1086,1091,1095]這樣的網頁列表,但它被壓制了。

回答

2

你必須做到以下幾點,使其工作:

{html, "доуч"++ binary_to_list(unicode:characters_to_binary([1076,1086,1091,1095]))} 

爲什麼失敗?

在一些詳細信息,該list_to_binary,因爲它試圖以每個項目列表轉換爲字節,它可以這樣做,因爲在[1076,1086,1091,1095]每個值將需要超過一個字節更失敗。

這是怎麼回事?

[1076,1086,1091,1095]是一個純粹的Unicode字符串表示形式"доуч"。 Yaws嘗試直接使用list_to_binary將字符串(列表)轉換爲二進制字符串,因此失敗。由於每個unicode字符可能需要多個字節,因此我們需要將其轉換爲一個字節數組。這可以使用:

unicode:characters_to_binary([1076,1086,1091,1095]). 
<<208,180,208,190,209,131,209,135>> 

這現在可以安全地在列表和二進制表示之間來回轉換。有關更多詳細信息,請參閱unicode

您可以轉換回UNICODE如下:

unicode:characters_to_list(<<208,180,208,190,209,131,209,135>>). 
[1076,1086,1091,1095]