You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows服务运行时SQL查询土耳其字符显示异常问题求助

解决Windows服务运行程序时土耳其字符显示异常的方案

1. 调整进程启动的区域与编码设置

Windows服务默认的运行环境区域可能和桌面用户不一致,导致字符编码解析错误。修改服务代码中启动app.exe的逻辑,指定土耳其语区域并强制UTF-8编码:

Private Sub SqlRun(sender As Object, e As ElapsedEventArgs)
    tmr.Enabled = False
    Try
        WriteToFile("app run")
        Dim startInfo As New ProcessStartInfo("C:\app.exe")
        ' 指定进程使用土耳其语区域
        startInfo.Locale = New Globalization.CultureInfo("tr-TR")
        ' 配置标准输出/错误流使用UTF-8编码
        startInfo.StandardOutputEncoding = System.Text.Encoding.UTF8
        startInfo.StandardErrorEncoding = System.Text.Encoding.UTF8
        proc = Process.Start(startInfo)
        WriteToFile("app run. ID " & proc.Id)
    Catch ex As Exception
        WriteToFile("app err " + ex.Message + ex.StackTrace)
    End Try
End Sub

2. 修正SQL连接字符串的编码配置

确保app.exe中的SQL连接字符串明确指定字符编码,避免数据库与程序间的编码不匹配:

  • SQL Server:在连接字符串中添加Unicode=True
    Server=你的服务器地址;Database=目标库;User Id=用户名;Password=密码;Unicode=True;
    
  • MySQL:添加CharSet=utf8mb4(支持全土耳其字符)
    Server=你的服务器地址;Database=目标库;Uid=用户名;Pwd=密码;CharSet=utf8mb4;
    

3. 修改服务的运行账户

Windows服务默认使用Local System账户,其区域设置可能与桌面用户不同。将服务登录账户改为当前桌面用户(需具备管理员权限):

  • 打开「服务」控制台,找到目标服务
  • 右键选择「属性」→ 切换到「登录」选项卡
  • 选择「此账户」,输入桌面用户的账户名和密码,点击确定后重启服务

4. 修复日志写入的编码问题

原WriteToFile方法使用系统默认编码写入日志,可能导致土耳其字符乱码,修改为UTF-8编码:

Private Sub WriteToFile(text As String)
    text += " " & Format(DateTime.Now, "dd/MM/yyyy hh:mm:ss")

    ' 使用UTF-8编码写入日志,确保字符正确保存
    Using writer As New IO.StreamWriter(path, True, System.Text.Encoding.UTF8)
        writer.WriteLine(text)
    End Using
End Sub

5. 配置系统区域设置

确保Windows Server 2019的系统区域设置为土耳其语:

  • 打开「控制面板」→「区域」→「管理」选项卡
  • 点击「更改系统区域设置」,选择「土耳其(土耳其)」
  • 重启服务器使设置生效

内容的提问来源于stack exchange,提问作者FikretBa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:27:24