2009-09-15 94 views
2

如何将字节数组转换为字符串?我需要获取原始内容,例如“96 = A8 = FC- = A8 = FE”,但是当我使用Encoding.UTF8.GetString(bytes)时,它返回“96 - ”。谢谢!将byte []转换为字符串

+5

真的没有这等作为字符串无编码: http://www.joelonsoftware.com/articles/Unicode.html 记住ASCII仍是一个编码! – stusmith 2009-09-15 14:44:53

+0

你是对的stushmith!没有“无编码”这样的东西..我的坏.. – 2009-09-16 21:53:50

回答

10

我想你误解了字符串的内容。最接近“原始内容”的是使用Encoding.Unicode - .NET在内部使用UTF-16,因此转换为UTF-16实际上只是将内存内容从字符串复制到字节数组的情况。

现在,回到你的问题,你有什么数据,什么是代表,为什么?文本数据是字符。二进制数据基本上是数字。你有有两个之间的映射,这就是编码。

我有一个article on Unicode它可以帮助你,但我强烈怀疑你需要退后一步,然后才能取得任何进展。

如果您尝试将字节数组转换为以十六进制表示的字节字符串,则可以使用BitConverter.ToString(byte[]),但我不会将其描述为“原始”转换。

编辑:好的,现在我们有上下文,它更容易回答。你在看什么是quoted printable编码。电子邮件应该指定引用的可打印的编码,所以当你解码QP编码时,这就是你应该使用的。如果您目前没有存储原始邮件的内容编码,你应该开始所以现在在做什么?

+0

我认为你是对的,请他退后一步,重新考虑这个问题。不过,我最好的猜测是,他期望这些编码的十六进制值能够转化为可在他的机器上查看的字符。如果是这样,也许他需要从一些本地代码页映射到Unicode。 – 2009-09-15 14:49:29

+1

这只是编码。默认情况下,如果这真的是他期望的:) – 2009-09-15 15:03:17

+0

我需要做的是解析电子邮件的内容。在解析之前,我们保存数据库中的内容。该列在byte []中返回给我。我的主要问题是电子邮件包含分数,例如“96⅜-⅞”。小数部分被转换为十六进制,但其余的消息是相同的。我已经有了一个代码来处理转换(使用正则表达式),但我不知道如何从返回的字段中获取“96 = A8 = FC- = A8 = FE”,它位于byte []中。 也许我解决这个问题的方法并不令人满意。任何建议,将不胜感激。谢谢! – 2009-09-15 15:10:46

1

您可能想要使用ASCII编码,而不是UTF8。

0

您还可以使用Convert.ToBase64CharArray方法

http://msdn.microsoft.com/en-us/library/system.convert.tobase64chararray(VS.80).aspx

Convert.ToBase64CharArray (字节[],的Int32,的Int32,CHAR [],Int32)将

一个8位的无符号整数 阵列的一个子集转换为Unicode字符阵列的等效子集 编码 ,基数为64位。参数 指定子集作为 输入和输出数组中的偏移量,并将输入数组 中的元素数量 进行转换。