如何将字符串中的特殊字符转换为unicode?

时间:2015-08-27 11:47:02

标签: java regex unicode special-characters

我找不到这个问题的答案,在这里尝试了几个答案,结合找到有用的东西,但无济于事。 我正在处理的应用程序使用用户名来创建具有该名称的PDF。但是,当某人的名字包含一个特殊字符,如"Yağmur"时,pdf创建者会惊慌失措并省略此特殊字符。 但是,当它获得等效的unicode("Yağmur")时,它会在pdf中打印"Yağmur"

如何检查名称/字符串是否有任何特殊字符(正则表达式= "[^a-z0-9 ]"),找到后,用其unicode等效字符替换该字符并返回新的单字节字符串?

2 个答案:

答案 0 :(得分:1)

我将尝试以通用方式提供解决方案,因为您正在使用的框架工作未被提及作为问题陈述的一部分。

我也很久以前就遇到了同样的问题。如果将text / char编码设置为UTF-8,则应由pdf引擎处理。请找到如何在框架中设置编码以生成pdf并进行试用。希望它有所帮助!!

答案 1 :(得分:0)

执行此操作的一种hackish方式如下:

/*
 * TODO: poorly named 
 */ 
public static String convertUnicodePoints(String input) {
    // getting char array from input
    char[] chars =  input.toCharArray();
    // initializing output
    StringBuilder sb = new StringBuilder();
    // iterating input chars
    for (int i = 0; i < input.length(); i++) {
        // checking character code point to infer whether "conversion" is required
        // here, picking an arbitrary code point 125 as boundary
        if (Character.codePointAt(input, i) < 125) {
            sb.append(chars[i]);
        }
        // need to "convert", code point > boundary
        else {
            // for hex representation: prepends as many 0s as required
            // to get a hex string of the char code point, 4 characters long
            // sb.append(String.format("&#xu%04X;", (int)chars[i]));

            // for decimal representation, which is what you want here
            sb.append(String.format("&#%d;", (int)chars[i]));
        }
    }
    return sb.toString();
}

如果执行:System.out.println(convertUnicodePoints("Yağmur")); ...

...你得到:Ya&#287;mur

当然,您可以使用&#34;转换&#34;逻辑并决定转换哪些范围。