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

时间:2011-10-13 08:19:34

标签: c# .net windows winforms

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

如何解决此问题。我为此读了一些文章,它告诉你不能在代码behinde.so上更改这个如何为这个问题创建一个sloution。

非常感谢你 最诚挚的问候

2 个答案:

答案 0 :(得分:2)

当您通过套接字发送字符串时,如何将其转换为字节,接收器如何将这些字节转换回字符串?您遇到的问题是发件人使用的字符编码与接收者的字符编码不匹配。将字符串转换为字节时应该执行的操作是使用内置的编码类之一,例如UTF8Encoding

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

您可能希望将块中的输入读入缓冲区并从那里通过套接字发送,但这是一般的想法。另一端的接收器应使用相同的编码将收到的byte转换回string

See this page on MSDN了解有关编码的更多信息。

答案 1 :(得分:1)

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

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

(不要忘记为每个新线程执行此操作)