【问题标题】:C# change non unicode language or change locationC# 更改非 unicode 语言或更改位置
【发布时间】:2011-10-13 08:19:34
【问题描述】:

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

我该如何解决这个问题。我为此阅读了一些文章,它说你不能在后面的代码上更改它。所以我该如何为这个问题创建一个解决方案。

非常感谢 最好的问候

【问题讨论】:

    标签: c# .net windows winforms


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      (不要忘记对每个新线程都这样做)

      【讨论】:

      • Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR"); Thread.CurrentThread.CurrentUICulture = newCultureInfo("tr-TR");我试试这个。这只会更改系统日期时间格式等。这对我的代码来说还不够。问题继续
      猜你喜欢
      • 2011-08-26
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 2019-05-16
      • 2015-06-19
      • 2011-07-26
      相关资源
      最近更新 更多