如何在java中将UTF-16转换为UTF-32?
我一直在寻找解决方案,但在这个话题上似乎没有太多。我找到了一些解决方案,建议:如何在java中将UTF-16转换为UTF-32?,java,unicode,utf-16,utf-32,Java,Unicode,Utf 16,Utf 32,我一直在寻找解决方案,但在这个话题上似乎没有太多。我找到了一些解决方案,建议: String unicodeString = new String("utf8 here"); byte[] bytes = String.getBytes("UTF8"); String converted = new String(bytes,"UTF16"); 但是,对于从utf8转换为utf16,java不处理“UTF32”,这使得此解决方案不可行。有人知道如何实现这一点的其他方法吗?公共静态字符[]by
String unicodeString = new String("utf8 here");
byte[] bytes = String.getBytes("UTF8");
String converted = new String(bytes,"UTF16");
但是,对于从utf8转换为utf16,java不处理“UTF32”,这使得此解决方案不可行。有人知道如何实现这一点的其他方法吗?公共静态字符[]bytesToHex(字节[]原始){
public static char[] bytesToHex(byte[] raw) {
int length = raw.length;
char[] hex = new char[length * 2];
for (int i = 0; i < length; i++) {
int value = (raw[i] + 256) % 256;
int highIndex = value >> 4;
int lowIndex = value & 0x0f;
hex[i * 2 + 0] = kDigits[highIndex];
hex[i * 2 + 1] = kDigits[lowIndex];
}
return hex;
}
byte[] bytearr = converted.getBytes("UTF-32");
System.out.println("With UTF-32 encoding:\t" + String.valueOf(bytesToHex(bytearr)));
System.out.println("With UTF-32 decoding:\t" + new String((bytearr), "UTF-32"));
int length=原始长度;
字符[]十六进制=新字符[长度*2];
for(int i=0;i>4;
int lowIndex=值&0x0f;
十六进制[i*2+0]=kDigits[highIndex];
十六进制[i*2+1]=kDigits[lowIndex];
}
返回十六进制;
}
byte[]bytearr=converted.getBytes(“UTF-32”);
System.out.println(“使用UTF-32编码:\t”+String.valueOf(bytesToHex(bytearr)));
System.out.println(“带UTF-32解码:\t”+新字符串((bytearr),“UTF-32”);
Java确实可以处理UTF-32,请尝试此测试
byte[] a = "1".getBytes("UTF-32");
System.out.println(a.length);
它将显示数组的lentgh=4在搜索之后,我实现了以下功能:
public static String convert16to32(String toConvert){
for (int i = 0; i < toConvert.length(); ) {
int codePoint = Character.codePointAt(toConvert, i);
i += Character.charCount(codePoint);
//System.out.printf("%x%n", codePoint);
String utf32 = String.format("0x%x%n", codePoint);
return utf32;
}
return null;
}
publicstaticstringconvert16to32(stringtoconvert){
对于(int i=0;i
既然UTF-32对我不起作用,我该如何进行转换?@DanielMedina,UTF-32不能保证在所有系统上都存在;页面上甚至没有提到它。等等,我正在为你准备答案。谢谢你,我真的很感激你的努力。很高兴你找到了一个有效的解决方案!很抱歉没有遵守我的承诺:P我在编写代码时遇到了一些奇怪的问题,无法在其他系统上重现。我的想法是使用codePointAt()
,它通常非常相似(以防您好奇)。字符串utf32
应该在循环上方声明,并且返回utf32
应该在循环之后,否则,拥有循环就没有意义了。