8

我来自 Mifare -writing 卡。 readingRFID

WRITE进入卡片,我使用的Byte[]是这样的:

byte[] buffer = Encoding.ASCII.GetBytes(txt_IDCard.Text);  

然后,READ从卡上,我得到了一些错误special characters,当它应该告诉我时,é, ã, õ, á, à...我得到?了:

string result = System.Text.Encoding.UTF8.GetString(buffer);
string result2 = System.Text.Encoding.ASCII.GetString(buffer, 0, buffer.Length);
string result3 = Encoding.UTF7.GetString(buffer); 

例如:相反,我得到Àgua, amanhã, vocêI receive/read ?gua, amanh?, voc?
我该如何解决?

4

3 回答 3

8

ASCII 根据其定义仅支持 128 个字符。

如果您正在阅读旧文本,您需要的是 ANSI 字符。

您可以使用Encoding.Default而不是Encoding.ASCII解释当前语言环境的默认 ANSI 代码页中的字符。

理想情况下,您应该确切地知道您期望 ANSI 字符使用哪个代码页,并使用 的重载Encoding.GetEncoding(int codePage)显式指定代码页,例如:

string result = System.Text.Encoding.GetEncoding(1252).GetString(buffer);

这是关于 Unicode 的一个非常好的参考页面:http: //www.joelonsoftware.com/articles/Unicode.html

另一个在这里:http: //msdn.microsoft.com/en-us/library/b05tb6tz%28v=vs.90%29.aspx

但也许你可以在读写时只使用UTF8

我不知道读卡器的详细信息。您读取和写入卡的数据只是字节负载吗?

如果是这样,您可以只使用 UTF8 进行读取和写入,这一切都可以正常工作。仅当您使用的是期望(或提供)ANSI 文本的旧设备时,才需要使用 ANSI。如果设备只是盲目地存储字节而不暗示任何特定格式,你可以做你喜欢的——在这种情况下,总是使用 UTF8。

于 2013-06-10T12:19:06.467 回答
6

似乎您使用的字符不是在 7 位 ASCII 中映射,而是在“扩展”ISO-8859-1 或 ISO-8859-15 中。您需要选择特定的编码来映射到您的字节数组,并且一切正常;

byte[] buffer = Encoding.GetEncoding("ISO-8859-1").GetBytes(txt_IDCard.Text);
于 2013-06-10T12:22:31.830 回答
1

你有两个问题:

  1. ASCII 仅支持有限数量的字符。
  2. 您当前正在使用两种不同的编码进行读取和写入。

您应该使用与阅读相同的编码进行编写。

写作

    byte[] buffer = Encoding.UTF8.GetBytes(txt_IDCard.Text);  

阅读

    string result = Encoding.UTF8.GetString(buffer);
于 2013-06-10T12:25:05.973 回答