Xamarin - 无法找到编码错误1252数据

时间:2018-05-29 14:07:41

标签: android ios xamarin encoding visual-studio-2017

我正在为Xamarin Visual Studio 2017处理一个应用程序。我正在尝试在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 =编码1252数据无法找到。确保已安装并启用了正确的国际代码集程序集。 (NotSupportedException异常)

Visual Studio 2017会引发以下错误

  

System.Reflection.TargetInvocationException:调用目标抛出了异常。

at

using (SqlConnection sqlConn = new 
SqlConnection(Configuration.ConnectionString))

它会在尝试从上面的using语句中的数据库中提取时发生。我正在使用SQL Server 2008 R2。我所能说的是,使用AndroidiOS向SQL Server发送和接收时遇到问题。

更新2:

使用了一些Exception Handlers之后,我把它归结为这个内部异常:

  

{System.NotSupportedException:无法找到编码1252数据。确保已安装并启用了正确的国际代码集程序集。     在< 896ad1d315ca4ba7b117efb8dacaedcf>中的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] in:0     在Mono.Data.Tds.Protocol.Tds.ProcessSubPacket()[0x00129] in: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     在< 868a6461786e4884ac572c5e90a6b7fd>中的System.Data.SqlClient.SqlConnection.Open()[0x00245]:0     在System.Data.Common.DbDataAdapter.QuietOpen(System.Data.IDbConnection连接,System.Data.ConnectionState& originalState)[0x0000c] in< 868a6461786e4884ac572c5e90a6b7fd>:0     at System.Data.Common.DbDataAdapter.FillInternal(System.Data.DataSet dataset,System.Data.DataTable [] datatables,System.Int32 startRecord,System.Int32 maxRecords,System.String srcTable,System.Data.IDbCommand command,System .Data.CommandBehavior行为)[0x0002d]在< 868a6461786e4884ac572c5e90a6b7fd>中:0     在System.Data.Common.DbDataAdapter.Fill(System.Data.DataSet dataSet,System.Int32 startRecord,System.Int32 maxRecords,System.String srcTable,System.Data.IDbCommand command,System.Data.CommandBehavior behavior)[0x00069]在< 868a6461786e4884ac572c5e90a6b7fd>中:0     在System.Data.Common.DbDataAdapter.Fill(System.Data.DataSet dataSet)[0x00029] in< 868a6461786e4884ac572c5e90a6b7fd>:0     at(wrapper managed-to-native)System.Reflection.MonoMethod:InternalInvoke(System.Reflection.MonoMethod,object,object [],System.Exception&)     at System.Reflection.MonoMethod.Invoke(System.Object obj,System.Reflection.BindingFlags invokeAttr,System.Reflection.Binder binder,System.Object [] parameters,System.Globalization.CultureInfo culture)[0x00032] in< 896ad1d315ca4ba7b117efb8dacaedcf> :0}

发生于:

DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);

2 个答案:

答案 0 :(得分:1)

在Visual Studio for Mac中的“ iOS Build”项目选项页上,应选中“ west”复选框。 Android属性相同。

enter image description here

在Android项目中,转到“属性”->“ Android选项”

然后使用链接器选项,在“其他受支持的编码”中,选中“西”。

答案 1 :(得分:1)

对于 VS2019,在 Windows 上:检查:'其他支持的编码'

enter image description here