Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中将UTF-16转换为UTF-32?_Java_Unicode_Utf 16_Utf 32 - Fatal编程技术网

如何在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
应该在循环之后,否则,拥有循环就没有意义了。