[英]How to convert special characters in a string to unicode?
我找不到这个问题的答案,在这里尝试了几个答案,结合找到有用的东西,但无济于事。 我正在处理的应用程序使用用户名来创建具有该名称的PDF。 但是,当某人的名字包含像"Yağmur"
这样的特殊字符时,pdf创建者会"Yağmur"
并省略这个特殊字符。 然而,当它获得unicode等价物( "Yağmur"
)时,它会在pdf中打印"Yağmur"
。
如何检查任何特殊字符的名称/字符串(regex = "[^a-z0-9 ]"
),找到后,用等效的unicode替换该字符并返回新的unicoded字符串?
我将尝试以通用方式提供解决方案,因为您正在使用的框架工作未被提及作为问题陈述的一部分。
我很久以前也遇到过同样的问题。 如果将text / char编码设置为UTF-8,则应由pdf引擎处理。 请找到如何在框架中设置编码以生成pdf并进行试用。 希望能帮助到你 !!
一种执行此操作的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ğmur
。
当然,您可以使用“转换”逻辑并决定转换哪些范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.