【问题标题】:Japanese character in AdaptiveCard Bot Framework V4AdaptiveCard Bot Framework V4 中的日文字符
【发布时间】:2019-10-12 17:06:23
【问题描述】:

我一直在尝试打印一张带有日文字符的简单卡片,但它一直显示框和未知字符。

这就是我创建自适应卡的方式,然后我将参数和数据保存在一个 json 中,以使其整洁。

        string[] paths = { ".", "Cards", "pickLanguageCard.json" };
        string fullPath = Path.Combine(paths);
        var adaptiveCard = File.ReadAllText(fullPath);
        return new Attachment()
        {
            ContentType = "application/vnd.microsoft.card.adaptive",
            Content = JsonConvert.DeserializeObject(adaptiveCard),
        };

打印输出的图片:

如您所见,返回的 JSON 数据也是错误的。因此,这将其归结为 Bot 的主要来源。我尝试了包含日文字符的 Json 文件,也更改了web.config 的编码,但它并没有解决我的问题。回到 Bot Framework v3,打印/显示日文字符没有问题。但是当我尝试 v4 时,日语字符会变成那样。

我们将不胜感激任何修复、解决方案、变通方法。谢谢

编辑: 尝试使用ReadAllText 中的编码参数(Encoding.UTF8、Encoding.UTF32、Encoding.Unicode)。在 UTF8 中,其他日文字符可以打印但破坏了无法解析的 Json 格式,也出现在 utf32 和 unicode 中。默认情况下,字符是相同的。

编辑: 所以经过不懈的研究,我发现JSON只将数据编码为标准的UTF-8以使其更轻,并尝试使用将字符转换为UTF-16并成功打印,但这对我来说似乎是错误的。有没有其他方法可以正确打印日文字符?

【问题讨论】:

  • 您是否尝试通过指定编码来ReadAllTextshift_jiseuc-jp
  • 是的,试过了
  • 您能解释一下您在最近一次编辑中的意思吗? JSON 是一种格式,但 JSON 文件只是一个文本文件。您可以根据需要对其进行编码。为什么将字符编码为 UTF-16 对您来说似乎是错误的?
  • @KyleDelaney 对不起,我没有说清楚,我的意思是我将它字面转换为 UTF-16,如 あ = \u3042,ReadAllText 成功读取了日文字符。跨度>
  • @KyleDelaney 抱歉回复晚了,周末。好吧,您会发现人类的眼睛无法理解(乍一看),这使得在打印为 UTF-16 的段落/句子/短语中编辑简单的单个字母变得更加困难。

标签: c# json botframework cjk adaptive-cards


【解决方案1】:

当您在 Visual Studio 2019 中编辑 JSON 并尝试使用日文字符保存文件时,Visual Studio 会自动为您提供修复格式:

如果您想使用特定编码手动保存文件,而不是依赖自动对话框,您可以使用 File > Save As... 对话框中的 Save with Encoding... 选项:

如果您选择代码页 65001,即带或不带签名的 Unicode (UTF-8),您的日文字符应正确显示:

【讨论】:

  • 我已经试过了,我也用不同的编码保存了它,但是File.ReadAllText(fullPath); 获取并解析日文字符到盒子里。
  • @Francisaskquestion - 由于它对我们有用,但对您无效,您能否尝试提供更多相关细节以帮助我们找到操作差异?如果您想在电子邮件中附加文件本身,我愿意尝试在私人对话中解决此问题。
  • 我喜欢解决这个问题,但我所做的工作已经被接受并且项目已经过渡到另一个部分,所以基本上问题已经解决了。谢谢,很抱歉耽误您的时间
  • @Francisaskquestion - 不要忘记给这个答案投票并将其标记为正确
猜你喜欢
  • 2021-01-18
  • 2018-04-14
  • 2019-07-27
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
相关资源
最近更新 更多