gpt4 book ai didi

c# - Ascii 到 XML 字符集转换

转载 作者:数据小太阳 更新时间:2023-10-29 02:14:52 31 4
gpt4 key购买 nike

是否有任何类可以将 ascii 转换为 xml 字符集,最好是开源的,我将在 vc++ 或 C# 中使用此类

我的 ascii 有一些 xml 字符集中没有的可打印字符

我刚刚尝试发送一份采用 ascii 字符集的简历,并尝试将其存储在在线 crm 中,但收到此错误消息

javax.xml.bind.UnmarshalException - 有链接异常:[javax.xml.stream.XMLStreamException: ParseError 在 [row,col]:[50,22]消息:字符引用“”是无效的 XML 字符。]

提前致谢

最佳答案

我在使用 C# 中创建 OpenXML 文档的 Excel 中遇到了同样的问题。
在构建包含错误 ASCII 字符的文档时,我的 Excel 导出功能会崩溃。
不知何故,我公司数据库中的字符串数据中有奇怪的字符。
即使我使用了他们的 OpenXML SDK 2.0 中的 Microsoft DocumentFormat.OpenXML 程序集,它在使用他们的对象分配字符串值时仍然没有处理这个问题。

修复:

t.Text = Regex.Replace(sValue, @"[\x00-\x08]|[\x0B\x0C]|[\x0E-\x19]|[\uD800-\uDFFF]|[\uFFFE\uFFFF]", "?");

这通过删除违规字符并将其替换为问号来清理 sValue 字符串。您可以替换为任何字符串或只使用空字符串。

XML Spec允许 0x09 (TAB)、0x0A(LF - 换行或 NL - 换行)和 0x0D(CR - 回车)。上面的正则表达式注意不要删除它们。

XML 1.1 规范允许您转义其中的一些字符。
例如:使用 对于 0x03,在 HTML 中显示为 L,在 Office 文档和记事本中显示为 L
我使用 Asp.net,这会在我的 GridView 中自动处理,因此我不需要替换这些值 - 但据我所知,我相信可能是浏览器处理了它。

我想在 OpenXML 中转义这些值,但是当我查看输出时,它显示了 excape 标记。所以 MikeTeeVee 在 Excel 中仍然显示为 MikeTeeVee,而不是 MikeTeeVee 或 MikeLTeeVee。这就是为什么我更喜欢 Mike?TeeVee 方法的原因。

我的直觉是这是当前 OpenXML 中的一个错误,它对允许的 XML ASCII 字符进行编码,但允许不受支持的 ASCII 字符继续通过。

更新:

我忘记了我可以使用“Open XML SDK 2.0 Productivity Tool”查看这些字符的显示方式,以查看 Excel 等内部文档。
我发现它使用的格式是:_x0000_

请记住:XML 1.0 不支持转义这些值,但 XML 1.1 支持,因此如果您使用的是 1.1,则可以使用此代码来转义它们。

常规 XML 1.1 转义:

t.Text = Regex.Replace(s, @"[\x00-\x08]|[\x0B\x0C]|[\x0E-\x19]|[\uD800-\uDFFF]|[\uFFFE\uFFFF]",
delegate(Match m)
{
return (byte)(m.Value[0]) == 0 //0x00 is not Supported in 1.0 or 1.1
? ""
: ("&#x" + string.Format("{0:00}", (byte)(m.Value[0])) + ";");
});


如果您要为 OpenXML 转义字符串,请改用它:

t.Text = Regex.Replace(s, @"[\x00-\x08]|[\x0B\x0C]|[\x0E-\x19]|[\uD800-\uDFFF]|[\uFFFE\uFFFF]",
delegate(Match m)
{
return (byte)(m.Value[0]) == 0 //0x00 is not Supported in 1.0 or 1.1
? ""
: ("_x" + string.Format("{0:0000}", (byte)(m.Value[0])) + "_");
});

关于c# - Ascii 到 XML 字符集转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1733544/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com