用重音逃脱大写字母?

时间:2018-03-21 19:27:53

标签: java escaping stringescapeutils

这是我的问题。

当我的webapp打印出我正在使用StringEscapeUtils库转义的文本时,如果文本中包含'ÁÉÍÓÚ',则PDF结果中缺少这些字母,只有它们是大写的。

例如:'LOSMÉDICOSESTÁNENEL TURNODEDÍA' 结果:'LOS MDICOS ESTN EN EL TURNO DE DA'

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

你知道如何使用StringEscapeUtils来逃避大写文本吗?

由于

1 个答案:

答案 0 :(得分:0)

我可以建议使用不同的库 - 我编写了自己的开源库,其中包含多个Util。其中之一是将字符串编码为unicode序列并将unicode序列解码回regualr String。例如,字符串"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序列而不是字符序列通常会解决许多问题,例如用'?'代替符号或者是giberish。原因是每个Unicode序列'\ UXXXX'都是唯一映射到符号的,并且不能被错误地转换。这是一种解决方法,因为真正的问题通常通过正确配置字符集或编码设置来解决,但在许多情况下,这种转换帮助我诊断问题然后解决它。但就像我说的,您可以将您的字符串转换为Unicode序列并将其发送到您的webapp。它应该工作。以下是描述MgntUtils开源库的文章的链接:Open Source Java library with stack trace filtering, Silent String parsing Unicode converter and Version comparison。这篇文章一开始就介绍了获取库的方法以及如何使用它。它可以作为maven中心和maithub上的maven工件提供。因此,您可以将其作为工件包含在项目中或/并获取源代码和Javadoc。在文章中搜索“String Unicode converter”段落以查看有关StringUnicodeEncoderDecoder

的说明