-2

这是我的问题。

当我的 web 应用程序打印我正在使用 StringEscapeUtils 库转义的文本时,如果 PDF 结果中的文本包含“ÁÉÍÓÚ”,则缺少这些字母,前提是它们是大写的。

例如:'LOS MÉDICOS ESTÁN EN EL TURNO DE DÍA' 结果:'LOS MDICOS ESTN EN EL TURNO DE DA'

由于某种原因,它忽略了带重音的大写字符

您知道使用 StringEscapeUtils 转义大写文本的任何方法吗?

谢谢

4

1 回答 1

0

我可以建议一个不同的库 - 我编写了自己的开源库,其中包含几个 Utils。其中之一是将字符串编码为 un​​icode 序列并将 unicode 序列解码回常规字符串。例如一个字符串"Hello World"将被转换为

"\u0048\u0065\u006c\u006c\u006f\u0020
\u0057\u006f\u0072\u006c\u0064"


并且可以恢复。在您的情况下,我运行了以下代码:

String s = "LOS MÉDICOS ESTÁN EN EL TURNO DE DÍA";
System.out.println("Original String: " + s);
s = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(s);
System.out.println("Encoded String: " + s);
s = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(s);
System.out.println("Decoded String: " + s);

并按预期收到结果(没有符号丢失):

Original String: LOS MÉDICOS ESTÁN EN EL TURNO DE DÍA
Encoded String: \u004c\u004f\u0053\u0020\u004d\u00c9\u0044\u0049\u0043\u004f\u0053\u0020\u0045\u0053\u0054\u00c1\u004e\u0020\u0045\u004e\u0020\u0045\u004c\u0020\u0054\u0055\u0052\u004e\u004f\u0020\u0044\u0045\u0020\u0044\u00cd\u0041
Decoded String: LOS MÉDICOS ESTÁN EN EL TURNO DE DÍA

在某些涉及不同于 ISO-8859-1 的字符集中的符号的情况下,我发现发送 Unicode 序列而不是字符序列通常可以解决很多问题,例如用“?”替换符号。或胡言乱语。原因是每个 Unicode 序列 '\UXXXX' 都被唯一地映射到一个符号并且不能被误译。这是一种解决方法,因为通常通过正确配置字符集或编码设置来解决真正的问题,但在许多情况下,这种转换帮助我诊断问题然后解决它。但就像我说的,您可以将您的字符串转换为 Unicode 序列并将其发送到您的 webapp。它应该工作。以下是描述 MgntUtils 开源库的文章的链接:具有堆栈跟踪过滤、Silent String 解析 Unicode 转换器和版本比较的开源 Java 库。一开始的文章解释了从哪里获取库以及如何使用它。它可以从 maven central 和 github 作为 maven artifact 获得。因此,您可以将其作为工件包含在您的项目中或/并获取源代码和 Javadoc。在文章中搜索“字符串 Unicode 转换器”段落以查看有关StringUnicodeEncoderDecoder

于 2018-03-21T20:48:39.463 回答