HTML和XML都不一样只是用于举例说明。
对于输入HTML文件
<p class=MsoNormal style='tab-stops:.5in'><b><span style='mso-tab-count:3'> </span></b><b><span
lang=AR-SY dir=RTL style='mso-bidi-language:AR-SY'>عزت
ابراهيم
الدوري</span><o:p></o:p></b></p>
接收XML用UTF-8编码
<Name Type="Script"> صدام حسين التكريتي</Name>
基本上,我需要一个序列ASCII序列&#XXXX;&#YYYY;&#ZZZZ; 保存为UTF-8。
我不太清楚,如果你想在HTML十进制编码转换到位或执行从HTML转换为XML文档。 转换十进制(或十六进制)编码字符为UTF-8/16不是太困难。 然而,在野外正确解析HTML是一种挑战(见本线 )。
这里是转换十进制和十六进制编码字符到位,并返回一个字符串的.Net一个天真的类(我并没有关于它的正确性和健壮性保障 - 特别是如果你正试图用它对付恶意HTML或有代理对字符):
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text.RegularExpressions;
namespace HtmlEncodingConverter
{
internal static class HtmlEncoding
{
private static readonly Regex EncodedCharRegex = new Regex(@"&#[X]?[0-9|A-F]{1,12};",
RegexOptions.Compiled |
RegexOptions.IgnoreCase |
RegexOptions.CultureInvariant);
public static string ToUtfCharacters(string input)
{
return ConvertInnerText(input, ReplaceWithCharacter);
}
private static string ReplaceWithCharacter(string original)
{
return EncodedCharRegex.Replace(original, new MatchEvaluator(DecodeCharacter));
}
private static string DecodeCharacter(Match match)
{
string digits = match.ToString().TrimStart(new[] {'#', '&'}).TrimEnd(';').ToUpperInvariant();
return digits.StartsWith("X") ? HexToString(digits) : DecToString(digits);
}
private static string DecToString(string digits)
{
return ((char) int.Parse(digits)).ToString();
}
private static string HexToString(string digits)
{
return ((char) int.Parse(
digits.Substring(1),
NumberStyles.HexNumber,
CultureInfo.InvariantCulture)).ToString();
}
private static string ConvertInnerText(string original, Func<string, string> converter)
{
var convertedQueue = new Queue<char>(original.Length);
var innerQueue = new Queue<char>();
int tagCount = 0;
bool hasFoundHtml = false;
foreach (char character in original)
{
if (character.Equals('<'))
{
hasFoundHtml = true;
if (tagCount == 0 && innerQueue.Count > 0)
{
var innerString = new string(innerQueue.ToArray());
string convertedString = converter.Invoke(innerString);
foreach (char convertedCharacter in convertedString)
{
convertedQueue.Enqueue(convertedCharacter);
}
innerQueue.Clear();
}
tagCount += 1;
convertedQueue.Enqueue(character);
continue;
}
if (character.Equals('>'))
{
tagCount -= 1;
convertedQueue.Enqueue(character);
continue;
}
if (tagCount == 0 && hasFoundHtml)
{
innerQueue.Enqueue(character);
}
else
{
convertedQueue.Enqueue(character);
}
}
return new string(convertedQueue.ToArray());
}
}
}
文章来源: Easy way to convert XXX; from HTML to UTF-8 xml either programmaticaly in .Net or using tools