【发布时间】:2020-06-28 10:15:21
【问题描述】:
我正在使用 C# 为银行开发一个 SMS 应用程序,该应用程序通过 SMS 网关向客户发送交易警报,即 ATM 交易。该应用程序运行良好,唯一的问题是对波斯文本进行编码,它没有正确编码波斯文本。
这是将波斯文本编码为 UTF-16 格式的方法。
public static string Endian2UTF(string s)
{
Encoding ui = Encoding.BigEndianUnicode;
Encoding u8 = Encoding.UTF8;
string str = u8.GetString(ui.GetBytes(s));
return str;
}
某些字符没有正确编码,移动设备上的消息如下所示
مستری뾽뾽رامیۯمابیمیار500.00اسانهۯاززابخوبادماشۯ뾽뾽뾽ص뾽뾽뾽뾽뾽뾽ددد뾽ما。
问题仅在于您在上面看到的某些字符。 供您参考,英文字符串没有问题。
【问题讨论】:
-
输入字符串已经是 UTF-16。展示你如何收到它。您可以将 icoming 数据加载到
byte[]而不是string然后才解码吗? -
a
stringis astringis astring- 编码不适用:仅在string和字节之间转换时适用。所以:无论这里发生什么,它都适用于string和字节之间的边界。您使用什么 API 发送短信?大概它适用于那里。您可能需要指定特定的代码页或类似代码,但坦率地说:如今大多数 API 都使用 UTF-8。 -
亲爱的@MarcGravell,感谢您的回复。 API 接受以下格式的 unicode 字符串(“\u0006E\u00064\u0006*\u00061\u0006�\0 \u0006�\u00061\u0006'\u0006E\u0006�”)。带有 ? 的字符标记表示错误编码。
-
啊。您的库已经具有执行十六进制操作的功能。检查
Tools.cs中的方法。