【发布时间】:2017-08-15 01:50:46
【问题描述】:
我的应用程序正在使用 Spring Integration 从 Outlook 邮箱进行电子邮件轮询。
因为它正在从外部系统(Outlook)接收字符串(电子邮件正文),所以我对它没有控制。
例如,
String emailBodyStr= "rejected by sundar14-\u200B.";
现在我正在尝试从该字符串中删除 unicode 字符\u200B。
我已经尝试过。
尝试#1:
emailBodyStr = emailBodyStr.replaceAll("\u200B", "");
尝试#2:
`emailBodyStr = emailBodyStr.replaceAll("\u200B", "").trim();`
尝试#3(使用 Apache Commons):
StringEscapeUtils.unescapeJava(emailBodyStr);
尝试#4:
StringEscapeUtils.unescapeJava(emailBodyStr).trim();
到目前为止没有任何效果。
当我尝试使用以下代码打印此字符串时。
logger.info("Comment BEFORE:{}",emailBodyStr);
logger.info("Comment AFTER :{}",emailBodyStr);
在 Eclipse 控制台中,不打印 unicode char,
评论之前:被 sundar14-拒绝。
但相同的代码在 Linux 控制台 中打印 unicode char,如下所示。
之前的评论:被 sundar14-\u200B 拒绝。
我阅读了一些推荐使用 str.replace() 的示例,但请注意示例使用 javascript、PHP 和 not Java。
【问题讨论】:
-
replaceAll方法在我尝试时有效。 -
你是如何测试它的?可以打印吗?
-
在尝试替换之前,我看到输出中有一个不可打印的字符(显示为“?”),长度为23。替换后,不可打印的字符消失了,长度为22.
-
您在 IDE 控制台中在哪里看到“?”?您使用的是哪个 IDE?当我使用 str.replaceAll() 时,我也得到了计数 23(之前)和 22(之后),但是当我将此字符串(在 str.replaceAll() 之后)存储在数据库中时 - 我可以在 DB 中看到 '\u200B' .
-
在 Windows 命令提示符下运行时看到问号。此外,将
String与另一个没有\u200B 创建的比较表明它们是相等的。
标签: java regex string unicode outlook