Xamarin - 找不到编码错误 1252 数据

Posted

技术标签:

【中文标题】Xamarin - 找不到编码错误 1252 数据【英文标题】:Xamarin - Encoding Error 1252 data could not be found 【发布时间】:2018-11-08 05:36:24 【问题描述】:

我正在为Visual Studio 2017 处理Xamarin 中的应用程序。我正在尝试在androidios 实时播放器设备上测试我的应用程序。 当我尝试运行它时,我的设备上出现以下错误(AndroidiOS):

级别=错误,标题=可视化错误,消息=编码 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。我只能说,使用AndroidiOS 向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[] collat​​ion) [0x00006] in :0 在 Mono.Data.Tds.TdsCharset.GetEncoding (System.Byte[] collat​​ion) [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 数据的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 和 Xamarin:找不到包

Xamarin.Forms错误CS0246'Foundation'找不到

错误:找不到 2 个 Android X 程序集,请确保安装以下 NuGet 包:- Xamarin.AndroidX.MediaRouter

模拟器和设备的 Xamarin.iOS 部署终止。错误 MT1001:在指定目录中找不到应用程序

Xamarin 无法构建到设备 - 工具退出,代码:1。输出:错误:在钥匙串中找不到指定的项目

Windows -1252 不支持编码名称