【问题标题】:Escape a uppercase char with accent?转义带有重音的大写字符?
【发布时间】:2018-03-21 19:27:53
【问题描述】:

这是我的问题。

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

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

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

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

谢谢

【问题讨论】:

  • 非常不清楚实际问题是什么。发布minimal reproducible example
  • 感谢您的评论,我希望现在如果我对我的问题更具体一点

标签: java escaping stringescapeutils


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    相关资源
    最近更新 更多