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

Xamarin项目连接SQL Server时遇Encoding 1252未找到错误求助

解决Xamarin连接SQL Server时的Encoding 1252缺失问题

看起来你碰到了Xamarin跨平台连接SQL Server时常见的编码依赖问题,结合你提供的异常追踪信息,我整理了几个经过验证的解决步骤:

1. 显式注册编码程序集

你已经引用了I18N.dll和I18N.West.dll,但关键是要在应用启动时强制初始化编码支持。在Android的MainActivity的OnCreate方法,或者iOS的AppDelegate的FinishedLaunching方法中添加以下代码:

using I18N.West;
using System.Text;

// 放在初始化逻辑最前面
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
// 提前加载1252编码,避免运行时延迟加载失败
Encoding.GetEncoding(1252);

这一步会让Mono运行时主动加载对应的编码实现,而不是等到SQL连接时才尝试加载。

2. 修改SQL Server连接字符串

在连接字符串中添加Unicode=True参数,强制客户端与服务器使用Unicode编码通信,绕过对Windows-1252编码的依赖:

Server=你的服务器地址;Database=你的数据库名;User ID=账号;Password=密码;Unicode=True;

如果你的数据库使用特定排序规则,可以额外添加Collation=SQL_Latin1_General_CP1_CI_AS(替换为你的数据库实际排序规则),进一步明确编码交互规则。

3. 确认程序集复制属性

确保I18N.dll和I18N.West.dll的Copy Local属性设置为True:

  • 在Visual Studio中右键点击项目引用的这两个程序集 → 打开属性面板 → 找到Copy Local选项,设置为True。
    这能保证这两个编码支持程序集被打包到移动应用安装包中,不会在真机上缺失。

4. 迁移到官方SQL客户端库(推荐)

旧的System.Data.SqlClient在Mono环境下的编码支持有限,建议替换为微软官方维护的Microsoft.Data.SqlClient:

  • 通过NuGet包管理器搜索Microsoft.Data.SqlClient并安装到你的Xamarin项目;
  • 修改代码中的命名空间引用:将using System.Data.SqlClient;替换为using Microsoft.Data.SqlClient;。
    这个库对跨平台场景的编码兼容性做了优化,能从根源减少这类问题。

问题根源说明

从你的异常栈可以看到,错误发生在Mono.Data.Tds.TdsCharset.GetEncodingFromSortOrder方法中——SQL Server返回的排序规则信息触发Mono尝试加载Windows-1252编码,但默认情况下移动设备上的Mono运行时不会自动加载所有编码实现,必须通过显式注册和引用I18N程序集来提供支持。


内容的提问来源于stack exchange,提问作者A.Vital

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:59:36