【问题标题】:Converting Byte[] array to String将 Byte[] 数组转换为字符串
【发布时间】:2013-06-07 17:29:05
【问题描述】:

我试过这个:

byte[] buffer = (byte[])mf.Input; 
    //Here, the buffer comes from a serial input
string result = System.Text.Encoding.UTF8.GetString(buffer)
string result2 = System.Text.Encoding.ASCII.GetString(buffer);

还有其他一些类似的方法。但它返回一些奇怪的字符......我该如何真正转换它?

这是我得到的值:“�??3?&?5?”
它应该返回给我一个Card ID 值,比如B54A7WQ912
缓冲区值为:`buffer {byte[12]}

[0]168  
[1]63  
[2]18  
[3]63  
[4]21  
[5]...  
[6]....  
[7]....  
[8]...  
[9]...  
[10]...  
[11]...   

每个都有一个值。

更新
现在我可以Write/Read 进入/来自RFID Mifare 卡。但是像á,ã,à,è 这样的特殊字符没有显示,而是显示?。我该如何解决?谢谢 !

Obs:我正在使用上面的方法/\

【问题讨论】:

  • 这是正确的方法,但如果您没有选择正确的编码,它将无法工作。您绝对确定原始文本不是 ANSI 或 ASCII 吗?
  • 什么奇怪的字符?缓冲区是否可能已部分填充?
  • 传输字符串的编码是什么?
  • 字符串以什么编码形式出现?数组的值是多少?什么是“奇怪的字符”?
  • 您提供的前 5 个字节既不是 utf8 也不是 ascii。提供更多数据和期望值。 card-id 是 10 个字符,我们有 12 个字节。有些东西没有加起来。

标签: c# encoding bytearray


【解决方案1】:

Encoding.GetString(byte[]) 是正确的方法,您必须选择正确的编码和/或确保发送给您的数据实际上是正确的格式。

【讨论】:

  • 如果不假设缓冲区真的被填满,Encoding.GetString(byte[],0,actualBytesInBuffer) 不是更正确的方法吗?
  • 没有Encoding.GetString只有Encoding.GetEncoding这样的方法
  • 更新:我现在可以写/读 Mifare RFID 卡了。但是当我读到这个(我在问题上显示的方式)时,它没有显示像é, ã, ó, ã á À à 这样的字符,你知道吗?我该如何解决?
  • 我猜正确的是这个:string result2 = System.Text.Encoding.ASCII.GetString(buffer, 0, buffer.Length);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
  • 2012-08-05
  • 1970-01-01
  • 2013-01-17
  • 2015-09-04
  • 2019-12-30
相关资源
最近更新 更多