【发布时间】: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并成功打印,但这对我来说似乎是错误的。有没有其他方法可以正确打印日文字符?
【问题讨论】:
-
您是否尝试通过指定编码来
ReadAllText?shift_jis或euc-jp -
是的,试过了
-
您能解释一下您在最近一次编辑中的意思吗? JSON 是一种格式,但 JSON 文件只是一个文本文件。您可以根据需要对其进行编码。为什么将字符编码为 UTF-16 对您来说似乎是错误的?
-
@KyleDelaney 对不起,我没有说清楚,我的意思是我将它字面转换为 UTF-16,如 あ = \u3042,
ReadAllText成功读取了日文字符。跨度> -
@KyleDelaney 抱歉回复晚了,周末。好吧,您会发现人类的眼睛无法理解(乍一看),这使得在打印为 UTF-16 的段落/句子/短语中编辑简单的单个字母变得更加困难。
标签: c# json botframework cjk adaptive-cards