可以忽略textbox.text编码吗?

时间:2018-09-23 18:28:00

标签: c# winforms character-encoding

我有一些代码,可从textbox.text控件中读取数据到字节数组中。它使用UTF8编码,没有任何问题。例如,该代码从文本框中读取M个字节,并将其作为字节添加到输出中。一切正常。

回写数据时,如果文本为非英语,则通常会出现问题。例如,如果文本是中文字符南,请说几次,对于文本框,似乎是0xE5、0x8D,0x97。

当数据写回到文本框中时,例如,第一次写操作以0xE5结尾,当下一批数据以0x8D 0x97开始写回时,它将以某种方式转换为0xEF 0xBF 0xBD。

enter image description here

我只是在使用Array.Copy。没什么特别的。用英语,没问题。使用中文(以及日语)时,第一笔写正常,但是第二笔写有一些“损坏”的字符。

2 个答案:

答案 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将整个内容写回到文本框中。