我来自Mifare的writing
和reading
- RFID
张卡片。
要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ê
我收到/读取?gua, amanh?, voc?
我该如何解决?
答案 0 :(得分:8)
ASCII的定义只支持128个字符。
如果您正在阅读遗留文本,那么您需要的是ANSI字符。
您可以使用Encoding.Default
代替Encoding.ASCII
来解释当前区域设置的默认ANSI代码页中的字符。
理想情况下,您可以确切地知道要使用ANSI字符的代码页,并使用this overload of 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。
答案 1 :(得分:5)
您似乎使用的是未在7位ASCII中映射的字符,而是在“扩展”ISO-8859-1或ISO-8859-15中。你需要选择一个特定的编码来映射到你的字节数组,事情应该可以正常工作;
byte[] buffer = Encoding.GetEncoding("ISO-8859-1").GetBytes(txt_IDCard.Text);
答案 2 :(得分:1)
你有两个问题:
您应该使用与阅读时相同的编码进行编写。
书写
byte[] buffer = Encoding.UTF8.GetBytes(txt_IDCard.Text);
阅读
string result = Encoding.UTF8.GetString(buffer);