Xamarin C#连接SQL Server安卓端遇Encoding 1254缺失问题求助
解决Xamarin Android中Encoding 1254缺失问题
问题根源
Xamarin Android默认只预装了少量通用编码集,像1254(土耳其语Windows编码)这类非通用编码需要手动引入对应的程序集才能使用,这就是真机上报错的核心原因。
具体解决步骤
1. 安装编码扩展NuGet包
在你的Xamarin项目中安装System.Text.Encoding.CodePages包,它包含了所有额外的编码定义(包括1254):
- 右键项目 → 管理NuGet程序包
- 搜索
System.Text.Encoding.CodePages,选择最新稳定版安装
2. 启动时注册编码集
在Android项目的MainActivity的OnCreate方法(或应用初始化的入口处),添加代码注册编码:
// 加载并注册额外编码集 System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); // 可添加验证代码,确认1254编码已加载 var turkishEncoding = System.Text.Encoding.GetEncoding(1254);
这段代码会让应用在启动时加载CodePages包中的编码定义,确保运行时能找到1254编码。
3. 检查SQL Server连接配置
如果连接字符串涉及字符编码设置,确保与1254兼容,或直接使用UTF-8(若服务器支持)避免编码不匹配:
var connStr = "Server=你的VPN内服务器地址;Database=目标库;User Id=账号;Password=密码;";
(注:使用SqlClient时无需额外指定charset,只要数据库的排序规则支持土耳其语字符即可)
4. 验证VPN网络连通性
确保安卓手机通过VPN能正常访问SQL Server的默认端口1433,可以用telnet工具测试,排除网络层面的连接障碍。
额外排查点
如果安装NuGet后仍报错,检查项目链接器设置:
- 右键Android项目 → 属性 → Android选项 → 链接器行为
- 若设置为“SDK程序集仅”或“全部程序集”,可能会剥离编码相关程序集,可先改为“不链接”测试,确认正常后再配置链接规则保留必要的编码程序集。
内容的提问来源于stack exchange,提问作者yunus demirbas
相关产品推荐
相关产品推荐

