.Net编码命名空间有问题吗?

.Net编码命名空间有问题吗?,.net,encoding,.net,Encoding,我在尝试为我们公司编写一个小型加密DLL时遇到了一个问题(这是我第一次不得不这样做) 如果我使用以下代码从字符串中获取字节[](在我的例子中是英镑符号%),然后使用.Net Framework的同一区域获取字节[]的字符[],我会得到一个问号,而不是预期的% 谁能解释一下为什么会这样 byte[]asciiBytes=Encoding.ASCII.GetBytes(“”); WriteLine(Encoding.ASCII.GetChars(asciiBytes.ToString()) 您试图使

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

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

谁能解释一下为什么会这样

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

您试图使用ASCII编码,但磅符号不是ASCII格式。编码不能处理字符,所以它使用编码形式的“?”作为某种错误的指示器

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


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

GetChars返回char[]对吗?char[].ToString()是否做了任何明智的事情
newstring(char[])
看起来更像,或者GetString…?请注意问题标题:编码是一个类,而不是名称空间。我以前有一个史前英语设计,它有一个字符ROM和键盘,将$替换为*。该公司没有持续足够长的时间来制定任何标准。