C#更改非Unicode语言或更改位置

我发送一些文本字到我的客户在套接字上。 这只是文字。 但有时我有问题。 当我的某个客户端在套接字上获取我的发送文本时。 他们看到这个文字是不正确的。 他们有问题(İ,Ö,Ü,Ğ)像这个土耳其人,所以他们没有得到我的文字。 当我更改这个用户的位置信息((在区域和语言 – >pipe理 – >更改系统区域设置=土耳其(在Windows 7上))或(更改非unicode语言=土耳其语))问题消失了。

我该如何解决这个问题。 我读了一些这方面的文章,它说你不能改变这个代码behinde.so如何可以创build一个sloution这个问题。

非常感谢。致以最诚挚的问候

当你通过套接字发送字符串,你如何将它转换为字节,接收器如何将这些字节转换回字符串? 您遇到的问题是在发件人使用的字符编码不匹配的接收器。 将字符串转换为字节时应该做的是使用内置的Encoding类之一,如UTF8Encoding

 var str = ...; //whatever needs to be sent via socket var utf8 = Encoding.UTF8; var bytes = utf8.GetBytes(str); socket.Send(bytes) 

你可能想要将输入块分成缓冲区并通过套接字从那里发送,但这是一般的想法。 另一端的接收机应该使用相同的编码将接收到的byte转换回string

有关编码的更多信息, 请参阅MSDN上的此页面 。

你可以像这样设置当前线程的CultureInfo:

 CultureInfo ci = new CultureInfo("tr-TR"); Thread.CurrentThread.CurrentCulture = ci; Thread.CurrentThread.CurrentUICulture = ci; 

(不要忘记为每个新的线程做这个)