在c#中解码字符串时获取未知字符

时间:2015-04-03 12:25:52

标签: c# xml encoding special-characters decoding

我正在开发一个项目,我将表单数据作为xml提交,并以xml格式存储到我的数据库中。

在解码c#中的xml数据时,我得到了未知字符。实际上我正在保存西班牙语文本,例如“Introduzcatextoaquí”。

所以在xml中我得到这个'í'字符作为%ED并且在使用HttpUtility.UrlDecode(formData)解码时我得到 而不是í。

解码前的XML数据

%3CArrayOfDiary%3E%3CDiary%3E%3CDate%3E03042015%3C/Date%3E%3CSituation%3EIntroduzca%20texto%20aqu%ED%3C/Situation%3E%3CSensation%3EIntroduzca%20texto%20aqu%ED%3C/Sensation%3E%3CConcern%3EIntroduzca%20texto%20aqu%ED%3C/Concern%3E%3CBeliefRating%3E0%3C/BeliefRating%3E%3CAnxietyRating%3E0%3C/AnxietyRating%3E%3C/Diary%3E%0A%20%20%3CArrayOfDiary%3E

解码后的数据

<ArrayOfDiary><Diary><Date>03042015</Date><Situation>Introduzca texto aqu�</Situation><Sensation>Introduzca texto aqu�</Sensation><Concern>Introduzca texto aqu�</Concern><BeliefRating>0</BeliefRating><AnxietyRating>0</AnxietyRating></Diary>
<Diary>
<Date>03042015</Date>
<Situation> Introduzca texto aqu�</Situation>
<Sensation> Introduzca texto aqu�</Sensation>
<Concern> Introduzca texto aqu�</Concern>
<BeliefRating>0</BeliefRating>
<AnxietyRating>0</AnxietyRating>
</Diary>
</ArrayOfDiary>

请帮帮我。感谢

2 个答案:

答案 0 :(得分:1)

如果没有看到数据的来源,我认为它是使用ISO-8859-1的编码创建的。

您可以通过在UrlDecode中使用相应的编码来解决问题:

Option Infer On
' ....
Dim s = "%3CArrayOfDiary%3E%3CDiary%3E%3CDate%3E03042015%3C/Date%3E%3CSituation%3EIntroduzca%20texto%20aqu%ED%3C/Situation%3E%3CSensation%3EIntroduzca%20texto%20aqu%ED%3C/Sensation%3E%3CConcern%3EIntroduzca%20texto%20aqu%ED%3C/Concern%3E%3CBeliefRating%3E0%3C/BeliefRating%3E%3CAnxietyRating%3E0%3C/AnxietyRating%3E%3C/Diary%3E%0A%20%20%3CArrayOfDiary%3E"
Dim enc = Encoding.GetEncoding("ISO-8859-1")
Dim txt = Web.HttpUtility.UrlDecode(s, enc)

为避免这种麻烦,您可以在网页的<meta charset="utf-8" />部分使用<head>。如果您想表明该网页是西班牙语,您仍然可以<html lang="es">

答案 1 :(得分:0)

https://msdn.microsoft.com/en-us/library/ms246590.aspx

查看此页面它应该对您有帮助,听起来您可能没有正确的LIP