HttpUtility.UrlDecode 从 UTF-8 编码到 ASCII
HttpUtility.UrlDecode encoding from UTF-8 to ASCII
answers2 = HttpUtility.UrlDecode(Model.FindOne<UserResult>(ur => ur.UserID == user.UserID
&& ur.ModuleID == 2
&& ur.TopicID == 9
&& ur.ActivityID == 2
&& ur.QuestionID == 2).Results, Encoding.ASCII).Split('|');
结果字段包含 SQL 数据库中编码为 ASCII 的德语字符。我正在使用批量发送 SMS 服务,该服务要求将特殊字符作为 ASCII 代码发送。
解码“%7C”和“%20”没有困难,因为 UTF-8 和 ASCII 代码对它来说是相同的。如果我以 UTF-8 (%c3%a4) 发送字符,它工作正常,但如果我将其更改回 ASCII(%E4),SMS 会发回一个问号代替字符。
我指出的 ASCII 解码方案似乎不起作用,我不确定我做错了什么。
%E4
不是 ASCII。如果你想使用这样的值,你必须使用你想要使用的实际编码,例如:
Encoding.GetEncoding("iso-8859-2").GetString(new byte[] { 0xE4 })
产生 ä
,而
Encoding.ASCII.GetString(new byte[] { 0xE4 })
产生 ?
.
ASCII 仅描述前 128 个字节值 - 其余是 extend ASCII 的特定编码。所以任何时候你尝试用 ASCII 解码任何大于 128 的东西,你都会得到 ?
.
显然,这也适用于反向 - 任何不属于 ASCII 的字符(你的 ä
当然不是)将被编码为 63
- 也称为 ?
:)
answers2 = HttpUtility.UrlDecode(Model.FindOne<UserResult>(ur => ur.UserID == user.UserID
&& ur.ModuleID == 2
&& ur.TopicID == 9
&& ur.ActivityID == 2
&& ur.QuestionID == 2).Results, Encoding.ASCII).Split('|');
结果字段包含 SQL 数据库中编码为 ASCII 的德语字符。我正在使用批量发送 SMS 服务,该服务要求将特殊字符作为 ASCII 代码发送。
解码“%7C”和“%20”没有困难,因为 UTF-8 和 ASCII 代码对它来说是相同的。如果我以 UTF-8 (%c3%a4) 发送字符,它工作正常,但如果我将其更改回 ASCII(%E4),SMS 会发回一个问号代替字符。
我指出的 ASCII 解码方案似乎不起作用,我不确定我做错了什么。
%E4
不是 ASCII。如果你想使用这样的值,你必须使用你想要使用的实际编码,例如:
Encoding.GetEncoding("iso-8859-2").GetString(new byte[] { 0xE4 })
产生 ä
,而
Encoding.ASCII.GetString(new byte[] { 0xE4 })
产生 ?
.
ASCII 仅描述前 128 个字节值 - 其余是 extend ASCII 的特定编码。所以任何时候你尝试用 ASCII 解码任何大于 128 的东西,你都会得到 ?
.
显然,这也适用于反向 - 任何不属于 ASCII 的字符(你的 ä
当然不是)将被编码为 63
- 也称为 ?
:)