我writing 和reading来自的Mifare - RFID卡.
要WRITE进卡,我使用的是Byte[]这样的:
byte[] buffer = Encoding.ASCII.GetBytes(txt_IDCard.Text);
Run Code Online (Sandbox Code Playgroud)
然后,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);
Run Code Online (Sandbox Code Playgroud)
例如:相反,我Àgua, amanhã, você收到/读取?gua, amanh?, voc?.
我该怎么解决?
ASCII的定义只支持128个字符.
如果您正在阅读遗留文本,那么您需要的是ANSI字符.
您可以使用Encoding.Default而不是Encoding.ASCII解释当前语言环境的默认ANSI代码页中的字符.
理想情况下,您可以确切地知道您期望使用ANSI字符的代码页,并使用此重载Encoding.GetEncoding(int codePage)明确指定代码页,例如:
string result = System.Text.Encoding.GetEncoding(1252).GetString(buffer);
Run Code Online (Sandbox Code Playgroud)
这是关于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.
您似乎使用的是未在7位ASCII中映射的字符,而是在"扩展"ISO-8859-1或ISO-8859-15中.你需要选择一个特定的编码来映射到你的字节数组,事情应该可以正常工作;
byte[] buffer = Encoding.GetEncoding("ISO-8859-1").GetBytes(txt_IDCard.Text);
Run Code Online (Sandbox Code Playgroud)