java 字符串 nbsp,HTML编码问题 - “”字符显示而不是“ ”

博客作者遇到了一个遗留应用程序的问题,该应用生成的HTML在转换为PDF时出现乱码。问题源于HTML中的不间断空格被编码为ISO-8859-1而非UTF8,导致在ActivePDF渲染时出现问题。作者尝试了重新编码和替换非ASCII字符的方法,但未成功。他们提供了一个可能的解决方案,即使用正则表达式替换非ASCII字符,但效果不佳。问题尚未找到最佳解决方案。
摘要由CSDN通过智能技术生成

我有一个遗留应用程序只是开始行为不端,无论出于何种原因,我不确定 . 它会生成一堆HTML,并由ActivePDF转换为PDF报告 .

这个过程是这样的:

从数据库中提取HTML模板,并在其中包含要替换的标记(例如"~CompanyName~","~CustomerName~"等)

用真实数据替换标记

使用简单的正则表达式函数整理HTML,该函数可以格式化HTML标记属性值(确保引号等,因为ActivePDF的渲染引擎只讨论属性值周围的单引号)

将HTML发送到创建PDF的Web服务 .

在这个混乱中的某个地方,HTML模板(   s)中的不间断空格编码为ISO-8859-1,因此在浏览器(FireFox)中查看文档时它们会错误地显示为"Â"字符 . ActivePDF会对这些非UTF8字符产生影响 .

我的问题:既然我没有时间对其进行调查,是否有一种简单的方法可以重新编码或查找并替换坏字符?我已经尝试通过我扔在一起的这个小功能发送它,但它把它变成了gobbledegook并没有改变任何东西 .

Private Shared Function ConvertToUTF8(ByVal html As String) As String

Dim isoEncoding As Encoding = Encoding.GetEncoding("iso-8859-1")

Dim source As Byte() = isoEncoding.GetBytes(html)

Return Encoding.UTF8.GetString(Encoding.Convert(isoEncoding, Encoding.UTF8, source))

End Function

有任何想法吗?

EDIT:

我现在正在接受这个,虽然它似乎不是一个好的解决方案:

Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String

Return Regex.Replace(html, "[^\u0000-\u007F]", " ")

End Function

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值