字符 Å Ö 没有显示在我的 DDL 中,我如何告诉 Restclient 使用特定的字符集?

2023-12-01

在我开始之前,这里是一个问题。应该是这样的:

Björn Nilsson,相反,它显示奇怪的特殊字符,所有包含字符 Å、Ä 和 Ö 的值都变成这样。

enter image description here

我用 XML 格式的 API 中的值填充我的 DDL,其中包含所有值,并且我们还使用 Linq2Rest 来实现这一点。

这个过程是这样的

 private readonly RestContext<ADConsultants> restContext;

public ConsultantContext(Uri uri, Format format)
{
    restContext = new RestContext<ADConsultants>(GetRestClient(uri, format), GetSerializerFactory(format));
}
public enum Format
{
    Pox,
    Json
}

private static readonly IEnumerable<Type> knownTypes = new[] {typeof (ADConsultants)};

public static IRestClient GetRestClient(Uri uri, Format format)
{
    switch (format)
    {
        case Format.Pox:
            return new XmlRestClient(uri);
        case Format.Json:
            return new JsonRestClient(uri);
        default:
            throw new NotImplementedException();
    }
}
private static ISerializerFactory GetSerializerFactory(Format format)
{
    switch (format)
    {
        case Format.Pox:
            return new XmlSerializerFactory(knownTypes);
        case Format.Json:
            return new JsonNetSerializerFactory();
        default:
            throw new NotImplementedException();
    }

}
public IQueryable<ADConsultants> Consultant
{
    get { return restContext.Query; }
}

}

这是我的 JsonNetSerializer Factory 类:

public class JsonNetSerializerFactory :ISerializerFactory 
{
    public ISerializer<T> Create<T>()
    {
        return new JsonNetSerializer<T>();
    }
    public class JsonNetSerializer<T> : ISerializer<T>
    {
        public T Deserialize(string input)
        {
            return JsonConvert.DeserializeObject<T>(input);
        }

        public IList<T> DeserializeList(string input)
        {
            return JsonConvert.DeserializeObject<IList<T>>(input);
        }
    }
}

这是我的控制器内部:

var consultants = new ConsultantContext(
        new Uri("http://adress:port/api/consultants"),
                ConsultantContext.Format.Json)
                    .Consultant
                    .Where(x => x.Office == "Örebro")  
                    .OrderBy(x => x.DisplayName)  
                    .ToList() 
                    .Select(x => new
                    {
                        name = x.DisplayName
                    });

我通过这样做做了一个测试:

name = "åäö"

它工作得很好,ddl 值是“åäö”

任何有关如何修复的帮助都将不胜感激,以便字符 Å Ö 可以作为我的 DDL 中的值正常工作。

HTTP 标头是 utf-8,我的 html 内容也有它。它必须是需要设置为特定字符集的 XML,我该怎么做?

提前致谢!


理论上你遇到了字符集编码/解码问题。

原因:您尝试读取的内容已使用 iso-8859-1 或 iso-8859-15 等字符集进行编码。您将尝试将其直接读取(解码)为“UTF-8”字符模型。当然它不会工作,因为 UTF-8 因为 UTF-8 不会奇迹般地识别你的特殊字符(ä、Ü、Ö 等..)。 UTF-8 无法猜测字符编码。

Solution:

1-(重新)将您的内容(例如“Björn Nilsson”)及其相应的字符集(iso-8859-1/iso-8859-15)编码到字节集合中。

2- 将您的内容解码为基于“UTF-8”的字符集。

这里有一个 Helper 类作为示例:

using System;
using System.Collections.Generic;
using System.Text;

    namespace csharp.util.charset
    {
        public class SysUtil
        {
            /// <summary>
            /// Convert a string from one charset to another charset
            /// </summary>
            /// <param name="strText">source string</param>
            /// <param name="strSrcEncoding">original encoding name</param>
            /// <param name="strDestEncoding">dest encoding name</param>
            /// <returns></returns>
            public static String StringEncodingConvert(String strText, String strSrcEncoding, String strDestEncoding)
            {
                System.Text.Encoding srcEnc = System.Text.Encoding.GetEncoding(strSrcEncoding);
                System.Text.Encoding destEnc = System.Text.Encoding.GetEncoding(strDestEncoding);
                byte[] bData=srcEnc.GetBytes(strText);
                byte[] bResult = System.Text.Encoding.Convert(srcEnc, destEnc, bData);
                return destEnc.GetString(bResult);
            }

        }
    }

Usage:

在您的(JSON、XML、其他)序列化器/反序列化器类中,只需像这样转换您的内容

String content = "Björn Nilsson";
SysUtil.StringEncodingConvert(content, "ISO-8859-1","UTF-8");

您可以尝试在解串器中进行调用(如果他们真的按照他们的意思操作):

public class JsonNetSerializerFactory :ISerializerFactory 
{
    public ISerializer<T> Create<T>()
    {
        return new JsonNetSerializer<T>();
    }
    public class JsonNetSerializer<T> : ISerializer<T>
    {
        public T Deserialize(string input, String fromCharset, String toCharset)

        {
           String changedString = SysUtil.StringEncodingConvert(input, fromCharset,toCharset);

            return JsonConvert.DeserializeObject<T>(changedString  );
        }

        public IList<T> DeserializeList(string input, String fromCharset, String toCharset)
        {
         String changedString =  SysUtil.StringEncodingConvert(input, fromCharset,toCharset);

            return JsonConvert.DeserializeObject<IList<T>>(changedString);
        }
    }
}

那是给你的

JsonNetSerializerFactory  

请尝试为其他工厂做同样的事情,例如

XmlSerializerFactory  

并且不要忘记 HTML 页面中的设置

<meta charset="utf-8"> <!--HTML 5 -->

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <!-- if HTML version < 5-->
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字符 Å Ö 没有显示在我的 DDL 中,我如何告诉 Restclient 使用特定的字符集? 的相关文章

  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • 从代码中,如何创建对存储在附加属性中的对象的属性的绑定?

    我们有一个继承的附加属性来存储一个对象 在可视化树的更下方 我们希望从代码绑定到该对象的属性 通常我们像这样构建绑定的路径部分 var someBinding new Binding Path new PropertyPath Attach
  • 在 C# 中调用 C++ 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有很多用 C 编写的库 我想从 C 调用这些库 但是 我遇到了很多问题 我想知道是否有书籍或指南告诉我如何做到这一点 Dll导入 htt
  • std::call_once 可重入且线程安全吗?

    std call once http en cppreference com w cpp thread call once是线程安全的 但它也是可重入的吗 我使用 VS2012 调试和发布 进行的测试表明 调用std call once从单
  • 如何使用 SOAP 且不使用 WSE 在 .NET 中签署 Amazon Web 服务请求

    亚马逊产品广告 API 以前称为 Amazon Associates Web Service 或 Amazon AWS 实施了一项新规则 即自 2009 年 8 月 15 日起 向其发送的所有 Web 服务请求都必须经过签名 他们在其网站上
  • 为什么'enable_if'不能用于禁用这里声明

    include
  • 使用 LINQ 更新 IEnumerable 对象的简单方法

    假设我有一个这样的业务对象 class Employee public string name public int id public string desgination public int grade List
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • 访问 ascx 文件中的母版页控件

    我有一个母版页文件 其中包含 2 个面板控件中的 2 个菜单 我还使用控件来检查用户是否登录并获取用户类型 根据我想要显示 隐藏面板的类型 控件本身不在母版页中引用 而是通过 CMS 系统动态引用 我想在用户控件中使用findcontrol
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • 无法从 JQuery ajax 调用接收 JSON

    我已经确定来自服务器的 JSON 是有效的 手动进行 ajax 调用 但我真的很想使用 JQuery 我还使用 firebug 确定发送到服务器的 post URL 是正确的 但是 错误回调仍然被触发 解析错误 我还尝试了数据类型 文本 我
  • 在 asp.net MVC 中使用活动目录进行身份验证

    我想使用活动目录对我的 asp net mvc 项目中的用户进行身份验证 在网上冲浪了几个小时后 我没有找到任何对我有用的东西 我已经看到了所有结果 但什么也没有 我尝试按照许多帖子的建议编辑我的 web config 如果有人可以帮助我提
  • 如何使用 NPOI 按地址(A1、A2)获取 Excel 单元格值

    我有一个 Excel 单元格地址 例如 A1 A2 如何使用 C 中的 NPOI 框架以编程方式访问此单元格 我找到的一些 Java POI 示例代码 CellReference cr new CellReference A1 row my
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 逆向工程 ASP.NET Web 应用程序

    我有一个 ASP NET Web 应用程序 我没有源代码 该 bin 包含 10 个程序集和一个 compiled 文件 我在 App Code dll 上使用 Reflector 它向我显示了类和命名空间之类的东西 但它太混乱了 有没有什
  • 使用 jQuery 从 ASP.Net JSON 服务获取数据

    我正在尝试调用 Google 地图地理编码 API 从纬度 经度对中获取格式化的地址 然后将其记录到控制台 我正在尝试获取为给定位置返回的第一个 formatted address 项目 我很简单无法从 JSON 中提取该项目 我不知道为什
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • 通过 Tab 键浏览 XML 文档字段

    In VB NET you can move through the fields in the XML member documentation with the Tab key 这在 C 中不起作用 还有其他方法吗 除了用鼠标将光标放在
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • Jackson 反序列化相当于 @JsonUnwrapped 吗?

    假设我有以下课程 public class Parent public int age JsonUnwrapped public Name name 生成 JSON age 18 first Joey last Sixpack 我如何将其反

随机推荐

  • 获取 Android 麦克风的分贝

    我已经搜索了一段时间了 但一直没能找到一种方法来实际从 Android 上的麦克风获取 SPL db 值 我发现讨论它的少数线程和文章将其视为某种东西so显然 任何人都应该能够做到这一点 并且更关心的是让他们的转换算法正确 有谁知道如何做到
  • Python 套接字:gethostbyaddr:反向 DNS 查找失败

    我在使用时获取主机名时遇到问题socket gethostbyaddr ip addr 在特定网站上 我不会详细说明这不适用于哪个网站 因此 按名称获取主机对于到目前为止我尝试过的每个网站都可以正常工作 但是当我尝试从中获取网站名称时 我收
  • 从 iPhone 应用程序传输 MP3 的最佳方式?

    我正在开发一个应用程序 它将通过 iPhone 应用程序从我的服务器传输音乐 这是我的第一个 iPhone 应用程序 所以我有点困惑 最好的办法是什么 这 是否已经内置了一些东西 我可以使用它 就像 MP3 播放器一样 我只需要指向 正确的
  • TypeScript 返回以泛型形式构造的对象

    我想定义以下通用函数来处理从接口类型到实现该接口的类类型的转换 考虑以下接口 类对 interface IExample num number class Example implements IExample num number 基本上
  • Spotfire 从计算列中查找值

    我在 Spotfire 中有一个数据集 我正在其中创建一个返回实体名称的计算列 返回的实体名称也在 A 列中 从计算列返回实体名称后 我需要一个位于不同列但位于实体名称行上的数据属性 我附上了数据快照 计算字段返回 公司 C 我需要创建一个
  • 实体框架仅返回一个值,但列表大小正确

    实体框架仅返回一个值 但列表大小正确 我有一个没有主 ID 的表 我需要获取或选择其中的所有值 我看到的是 当我使用 linq 进行选择时 对象的数量是正确的 但它一遍又一遍地是第一行 我只是在做这样的事情 List
  • 回溯如何与标记一起使用?

    我在互联网上进行了搜索 但找不到关于回填如何工作的正确解释 您能解释一下回溯是如何工作的吗 它如何与markers 我知道它有两种主要类型的标记 其中有下一个四边形 其中包含下一个列表 I found 这段代码 其中他们获取输入文件并使用
  • Shiny:通过单击 valueBox 触发弹出窗口

    我想通过单击在弹出窗口中显示数据表valueBox The valueBox本身应该作为actionButton 当我点击valueBox它应该在弹出窗口中呈现一个表格 如下图所示 任何人都可以帮忙解决这个代码吗 My code libra
  • 如何从 Auth::attempt() 检索更具体的错误

    我对 laravels Auth attempt 有一次奇怪的经历 我为用户制作了一个注册页面 一切正常 您可以 sign up 确认电邮 sign in etc 现在奇怪的部分是 Auth attempt 对于任何数据输入都可以正常工作
  • 如何停止Spring的默认输出?

    我是春天的新手 当我运行 Spring 批处理应用程序时 我期望只看到 Hello World 但相反 我得到以下附加详细信息 May 03 2012 12 28 42 PM org springframework context supp
  • 如何将关闭按钮添加到 UIModalPresentationFormSheet 中呈现的模态视图角?

    我想在某个角落添加一个浮动关闭 x 按钮UIModalPresentationPageSheet看法 效果如下 但是将其添加到父视图会使其显示在页面表后面 并且也无法点击 并将其添加到页面表将使其部分隐藏 因为它超出了视图区域 还有更好的解
  • Javascript:如何找到第一个重复值并返回其索引?

    我必须在数组中找到第一个重复值 然后在变量firstIndex 中返回其索引 这必须通过 for 循环来完成 for 循环应该在找到第一个重复项后停止 我知道这可能很简单 但我被困住了 到目前为止我已经有了这个 但它似乎不起作用 var n
  • SSL密钥交换加密技术[关闭]

    Closed 这个问题是无关 目前不接受答案 匿名 DH 临时 DH 和固定 DH 三种密钥交换算法有何区别 From 思科的文档 固定迪菲 赫尔曼 这是 Diffie Hellman 密钥交换 其中 服务器的证书包含 Diffie Hel
  • 从 UILabel Swift 中获取 Int

    我遇到的问题是 有大量以数字作为标签的按钮 所以我想我可以将标签视为整数 而不是为每个按钮创建一个操作 IBAction func NumberInput sender UIButton var input Int sender title
  • 使用 Foundation 6 的中间人

    我想将 Middleman 与出色的 Foundation 6 一起使用 Here是我在 Middleman 网站上找到的一个存储库 我安装了 Middleman 以及 Xcode 开发人员工具 当我跑步时middleman init T
  • 如何在android中的服务中调用振动器

    我正在尝试运行vibrator如果从我的应用程序调用服务 我将从Fragment但我不知道为什么振动器在服务内不起作用 我什至无法打印Toast 我的代码 从片段调用 Intent buzz new Intent getActivity L
  • Entity Framework Core 中动态更改架构

    UPD here这是我解决问题的方法 尽管它可能不是最好的 但它对我有用 我在使用 EF Core 时遇到问题 我想通过模式机制在项目数据库中分离不同公司的数据 我的问题是如何在运行时更改架构名称 我找到了类似的问题关于这个问题 但它仍然没
  • Google 图表:自定义刻度

    我想在 Google 图表的水平轴上设置自己的刻度 我包括了 hAxis ticks 根据文档 在我下面的尝试中 但它拒绝工作 因为刻度仍然不是整数 即使我指定它们是整数 我究竟做错了什么
  • 是否可以在未计算的上下文中从 STD 形成指向不可寻址函数的指针?

    如中所述命名空间 std 6 让 F 表示标准库函数 除非 F 被指定为可寻址函数 否则如果 C 程序显式或隐式尝试形成指向 F 的指针 则其行为是未指定的 可能是格式错误的 这对于以下程序意味着 include
  • 字符 Å Ö 没有显示在我的 DDL 中,我如何告诉 Restclient 使用特定的字符集?

    在我开始之前 这里是一个问题 应该是这样的 Bj rn Nilsson 相反 它显示奇怪的特殊字符 所有包含字符 和 的值都变成这样 我用 XML 格式的 API 中的值填充我的 DDL 其中包含所有值 并且我们还使用 Linq2Rest