.Net Encoding命名空间的问题?

时间:2011-01-05 17:17:41

标签: .net encoding

我在尝试为公司编写一个小型加密DLL时遇到了一个问题(这是我第一次做这样的事情)。

如果我使用以下代码从字符串中获取byte [](在我的例子中是英镑符号£),然后使用.Net Framework的相同区域来获取字节的char [] []我得到一个问号而不是预期的£!

有人可以解释为什么会这样吗?

byte [] asciiBytes = Encoding.ASCII.GetBytes(“£”); Console.WriteLine(Encoding.ASCII.GetChars(asciiBytes)的ToString());

1 个答案:

答案 0 :(得分:3)

您正在尝试使用ASCII编码,但井号不是ASCII。编码不能处理字符,所以它使用编码形式的“?”作为一个错误的指标。

我建议您改用UTF-8。所有Unicode字符都可以用UTF-8表示,它对于真正的ASCII字符串(非常常见)很有效。

有一点需要注意:加密通常适用于任意二进制数据,结果是任意二进制数据。 不要尝试使用类似Encoding.UTF8.GetString(bytes)的内容将加密结果转换回字符串 - 这会导致数据丢失,因为任意二进制数据几乎肯定不会是有效的UTF- 8个编码的字符序列。如果需要字符串结果,请使用base64编码:Convert.ToBase64String(bytes)

相关问题