我有一些代码,可从textbox.text控件中读取数据到字节数组中。它使用UTF8编码,没有任何问题。例如,该代码从文本框中读取M个字节,并将其作为字节添加到输出中。一切正常。
回写数据时,如果文本为非英语,则通常会出现问题。例如,如果文本是中文字符南,请说几次,对于文本框,似乎是0xE5、0x8D,0x97。
当数据写回到文本框中时,例如,第一次写操作以0xE5结尾,当下一批数据以0x8D 0x97开始写回时,它将以某种方式转换为0xEF 0xBF 0xBD。
我只是在使用Array.Copy。没什么特别的。用英语,没问题。使用中文(以及日语)时,第一笔写正常,但是第二笔写有一些“损坏”的字符。
答案 0 :(得分:1)
该问题与读/写文本框无关。问题是如何将文本转换为字节并返回。您尚未提供任何代码,因此我的代码不一定完全符合您的要求,但是可以将UTF-8字符串转换为字节,您可以这样做:
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(textBox1.Text);
要将byte[]
转换为字符串:
textbox1.Text = System.Text.Encoding.UTF8.GetString(bytes);
如果您忽略编码而仅使用ascii编码,则转换为字节时将导致数据丢失。
还有一个与将中文转换为byte[]
有关的问题:
How to encode and decode Broken Chinese/Unicode characters?
答案 1 :(得分:0)
首先,感谢您提供的信息。我仅以中文为例。该代码将不知道该语言,因此无需在意。可能是印地语或日语。您使用的是将byte []转换为字符串的方法。
发布问题后,我意识到代码似乎可以正确处理数据,只是没有写回Textbox文本控件。我不确定控件在做什么,也许它“检测”到该语言或检测到它不是UTF8并尝试某种编码。
但是无论如何,我都将字节写回到文本框中直到最后,这似乎工作得很好。也就是说,我一直使用Array.Copy(...)将字节添加回数组中,最后,如您所述,使用UTF8将整个内容写回到文本框中。