Ruby是否具有.NET的Encoding.ASCII.GetString(byte [])?Ruby等同於.NET的Encoding.ASCII.GetString(byte [])
Encoding.ASCII.GetString(bytes [])需要一個字節數組,並在使用ASCII編碼解碼字節後返回一個字符串。
Ruby是否具有.NET的Encoding.ASCII.GetString(byte [])?Ruby等同於.NET的Encoding.ASCII.GetString(byte [])
Encoding.ASCII.GetString(bytes [])需要一個字節數組,並在使用ASCII編碼解碼字節後返回一個字符串。
假設你的數據是在像這樣的陣列(每個元素是一個字節,並且進一步地,從你張貼,不大於127的值,即,一個7位ASCII字符的描述):
array =[104, 101, 108, 108, 111]
string = array.pack("c*")
在此之後,字符串將包含「你好」,這是我相信你要求。
pack方法「根據給定模板字符串中的指令將arr的內容打包成二進制序列」。
「c *」要求將數組的每個元素解釋爲「char」的方法。如果您想將它們解釋爲未簽名的字符,請使用「C *」。
http://ruby-doc.org/core/classes/Array.html#M002222
在文檔頁面給出的示例使用函數將字符串轉換Unicode字符。在Ruby中,我相信這是用iconv做得最好:
require "iconv"
require "pp"
#Ruby representation of unicode characters is different
unicodeString = "This unicode string contains two characters " +
"with codes outside the ASCII code range, " +
"Pi (\342\x03\xa0) and Sigma (\342\x03\xa3).";
#printing original string
puts unicodeString
i = Iconv.new("ASCII//IGNORE","UTF-8")
#Printing converted string, unicode characters stripped
puts i.iconv(unicodeString)
bytes = i.iconv(unicodeString).unpack("c*")
#printing array of bytes of converted string
pp bytes
閱讀上Ruby的語言Iconv here。您可能還想檢查this question。
你能否重現這個例子「Pi(\ u03a0)和Sigma(\ u03a3)」。從C#到Ruby? – 2010-06-03 16:00:31
該示例的關鍵部分是採用unicode字符串並使用Encoding.ascii將其呈現在ASCII字符集中。 encodedBytes函數會從字符串中「去掉」unicode字符。從你的問題,我假設你是在使用GetString從encodedBytes呈現的實際字符串。在這種情況下,在Ruby中,最好使用Iconv,並將包含Unicode字符的原始字符串傳遞給Iconv,Iconv會將其轉換爲ASCII字符串(可能會剝離不帶ASCII表示的Unicode字符)。然後你可以使用這個字符串。 – Roadmaster 2010-06-03 16:34:08
最好解釋一下'Encoding.ASCII.getString(bytes [])'的作用 - 並不是每個人都知道Ruby真的會知道c#。 – 2010-06-03 15:19:02
這裏是對Enoding.ASCII.getString(bytes [])做什麼的解釋,http://msdn.microsoft.com/en-us/library/system.text.encoding.ascii.aspx – 2010-06-03 15:24:50