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=TrueServer=你的服务器地址;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
相关产品推荐
相关产品推荐

