Xamarin - 找不到编码错误 1252 数据
Posted
技术标签:
【中文标题】Xamarin - 找不到编码错误 1252 数据【英文标题】:Xamarin - Encoding Error 1252 data could not be found 【发布时间】:2018-11-08 05:36:24 【问题描述】:我正在为Visual Studio 2017
处理Xamarin
中的应用程序。我正在尝试在android
和ios
实时播放器设备上测试我的应用程序。
当我尝试运行它时,我的设备上出现以下错误(Android
和 iOS
):
级别=错误,标题=可视化错误,消息=编码 1252 数据 找不到。确保您拥有正确的国际代码集 组件已安装并启用。 (NotSupportedException)
我通过Google
搜索发现了类似的问题,但是修改后还是不能运行。我检查了这两种设备的所有国际化选项,我什至直接保存为UTF-8
编码,因为我认为这可能是编码windows-1252
的问题。我还将I18N.dll
引用到I18N.West.dll
两者。
任何帮助将不胜感激。谢谢。
更新:
我已经能够进一步缩小问题范围。
using (SqlConnection sqlConn = new
SqlConnection(Configuration.ConnectionString))
//sqlConn.Open();
.open
导致了编码错误。将其注释掉后,该应用程序将在实时设备上运行,但是,我现在得到:
Level=Error,Title=Uncaught Exception,Message=Encoding 1252 数据找不到。确保您安装并启用了正确的国际代码集程序集。 (NotSupportedException)
而Visual Studio 2017
抛出以下错误
System.Reflection.TargetInvocationException:调用的目标已抛出异常。
在
using (SqlConnection sqlConn = new
SqlConnection(Configuration.ConnectionString))
它发生在它试图从上面的using
语句中的数据库中提取的那一刻。我正在使用SQL Server 2008 R2
。我只能说,使用Android
和iOS
向SQL Server 发送和接收数据时存在问题。
更新 2:
在使用了一些Exception Handlers
之后,我将其归结为这个内部异常:
System.NotSupportedException:找不到编码 1252 的数据。确保您安装并启用了正确的国际代码集程序集。 在 System.Text.Encoding.GetEncoding (System.Int32 代码页) [0x0023f] 在 :0 在 Mono.Data.Tds.TdsCharset.GetEncodingFromSortOrder (System.Int32 sortId) [0x00022] in :0 在 Mono.Data.Tds.TdsCharset.GetEncodingFromSortOrder (System.Byte[] collation) [0x00006] in :0 在 Mono.Data.Tds.TdsCharset.GetEncoding (System.Byte[] collation) [0x00008] in :0 在 Mono.Data.Tds.Protocol.Tds.ProcessEnvironmentChange () [0x00229] 中:0 在 Mono.Data.Tds.Protocol.Tds.ProcessSubPacket () [0x00129] 中:0 在 Mono.Data.Tds.Protocol.Tds.NextResult () [0x00039] in :0 在 Mono.Data.Tds.Protocol.Tds.SkipToEnd () [0x00000] in :0 在 Mono.Data.Tds.Protocol.Tds70.Connect (Mono.Data.Tds.Protocol.TdsConnectionParameters connectionParameters) [0x0058e] in :0 在 Mono.Data.Tds.Protocol.Tds80.Connect (Mono.Data.Tds.Protocol.TdsConnectionParameters connectionParameters) [0x00000] in :0 在 System.Data.SqlClient.SqlConnection.Open () [0x00245] 在 :0 在 System.Data.Common.DbDataAdapter.QuietOpen (System.Data.IDbConnection 连接,System.Data.ConnectionState& originalState) [0x0000c] 在 :0 在 System.Data.Common.DbDataAdapter.FillInternal(System.Data.DataSet 数据集,System.Data.DataTable[] 数据表,System.Int32 startRecord,System.Int32 maxRecords,System.String srcTable,System.Data.IDbCommand 命令,系统.Data.CommandBehavior 行为)[0x0002d] in :0 在 System.Data.Common.DbDataAdapter.Fill(System.Data.DataSet 数据集,System.Int32 startRecord,System.Int32 maxRecords,System.String srcTable,System.Data.IDbCommand 命令,System.Data.CommandBehavior 行为)[0x00069]在 :0 在 System.Data.Common.DbDataAdapter.Fill (System.Data.DataSet dataSet) [0x00029] 在 :0 在(包装器托管到本机) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) 在 System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] 参数, System.Globalization.CultureInfo 文化) [0x00032] 在 中: 0
发生在:
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
【问题讨论】:
请阅读this为您的应用添加IUncaughtExceptionHandler
,并获取具体例外情况。
@JoeLv-MSFT 根据您的要求,我使用了一些异常处理程序,而内部异常是我的主要问题。
【参考方案1】:
在 Visual Studio for Mac 的“iOS 构建”项目选项页面中,您应该选中“west”复选框。 Android 属性也是如此。
在 Android 项目中,转到 Properties -> Android Options
然后是Linker Options,在“Additional supported encodings”中勾选“West”。
【讨论】:
你是救星 对于 Mac 上的 Visual Studio 2019,转到项目 > 项目名称工具选项 -> Android 构建 -> 链接器 -> 国际化 -> 选中西框。 很遗憾这没有被标记为已接受的答案。【参考方案2】:对于 VS2019,在 windows 上:检查:'Additional Supported Encodings'
【讨论】:
以上是关于Xamarin - 找不到编码错误 1252 数据的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Forms错误CS0246'Foundation'找不到
错误:找不到 2 个 Android X 程序集,请确保安装以下 NuGet 包:- Xamarin.AndroidX.MediaRouter
模拟器和设备的 Xamarin.iOS 部署终止。错误 MT1001:在指定目录中找不到应用程序