首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >转义日语字符串,但不将其转换为unicode

转义日语字符串,但不将其转换为unicode
EN

Stack Overflow用户
提问于 2017-07-07 04:38:32
回答 1查看 293关注 0票数 0

目前,我们正在使用StringEscapeUtils.escapeEcmaScript来转义任何引号和制表符等,它适用于英语,但当涉及到日语时,它将所有日语字符编码为unicode,需要关于如何在转义所有特殊字符(引号,制表符等)的同时保持日语字符的建议。

示例:

代码语言:javascript
运行
复制
System.out.println(StringEscapeUtils.escapeEcmaScript("Price must be between 1 and 3"));
System.out.println(StringEscapeUtils.escapeEcmaScript("で本を販売して 70% のロイヤリティを得るに"));
System.out.println(StringEscapeUtils.escapeEcmaScript("Der Preis muss zwischen angewendet werden kann."));

输出:

代码语言:javascript
运行
复制
Price must be between 1 and 3
\u3067\u672C\u3092\u8CA9\u58F2\u3057\u3066 70% \u306E\u30ED\u30A4\u30E4\u30EA\u30C6\u30A3\u3092\u5F97\u308B\u306B
Der Preis muss zwischen angewendet werden kann.

看起来它只在日语中失败

EN

回答 1

Stack Overflow用户

发布于 2021-05-22 00:45:48

StringEscapeUtils.escapeEcmaScript always escapes characters outside of U+0020-U+007F.

如果您不想转义日语字符,则必须仅将字符串中的ASCII字符传递给StringEscapeUtils.escapeEcmaScript()

代码语言:javascript
运行
复制
package org.example;

import java.util.Arrays;

import org.apache.commons.text.StringEscapeUtils;

public class Test {
  public static void main(String[] args) {
      System.out.println(escapeEcmaScript("Price must be between 1 and 3"));
      System.out.println(escapeEcmaScript("で本を販売して 70% のロイヤリティを得るに"));
      System.out.println(escapeEcmaScript("Der Preis muss zwischen angewendet werden kann."));
      System.out.println(escapeEcmaScript("1'2\"/3"));
  }

  public static String escapeEcmaScript(String str) {
      return Arrays.stream(str.split("")).map(s -> escapeCharacter(s)).collect(StringBuilder::new, StringBuilder::append, StringBuilder::append).toString();
  }

  public static String escapeCharacter(String str) {
      if (str.matches("\\p{ASCII}")) {
          return StringEscapeUtils.escapeEcmaScript(str);
      } else {
          return str;
      }
  }
}

您将得到如下结果:

代码语言:javascript
运行
复制
Price must be between 1 and 3
で本を販売して 70% のロイヤリティを得るに
Der Preis muss zwischen angewendet werden kann.
1\'2\"\/3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44958443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档