Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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中获取unicode字符的十进制值?_Java_Unicode - Fatal编程技术网

如何在Java中获取unicode字符的十进制值?

如何在Java中获取unicode字符的十进制值?,java,unicode,Java,Unicode,我需要一种编程方式来获取字符串中每个字符的十进制值,以便将它们编码为HTML实体,例如: UTF-8: 著者名 &#33879;&#32773;&#21517; 十进制: 著者名 &#33879;&#32773;&#21517; 我猜想您只是对从char到int的转换感兴趣,这是隐含的: for (int i = 0; i < text.length(); i++) { char c = text.charAt(i);

我需要一种编程方式来获取字符串中每个字符的十进制值,以便将它们编码为HTML实体,例如:

UTF-8:

著者名
&#33879;&#32773;&#21517;
十进制:

著者名
&#33879;&#32773;&#21517;

我猜想您只是对从
char
int
的转换感兴趣,这是隐含的:

for (int i = 0; i < text.length(); i++)
{
    char c = text.charAt(i);
    int value = c;
    System.out.println(value);
}
for(int i=0;i
编辑:如果要处理代理项对,可以使用以下方法:

for (int i = 0; i < text.length(); i++)
{
    int codePoint = text.codePointAt(i);
    // Skip over the second char in a surrogate pair
    if (codePoint > 0xffff)
    {
        i++;
    }
    System.out.println(codePoint);
}
for(int i=0;i0xffff)
{
i++;
}
System.out.println(代码点);
}

好了,在阅读了Jon的帖子后,我仍然在思考Java中的代理,我决定少一点懒惰,用谷歌搜索一下。实际上,在Character类中支持代理,只是有点。。环岛

假设输入有效,下面的代码将正常工作:

    for (int i = 0; i < str.length(); i++) {
        char ch = str.charAt(i);
        if (Character.isHighSurrogate(ch)) {
            System.out.println("Codepoint: " + 
                   Character.toCodePoint(ch, str.charAt(i + 1)));
            i++;
        }
        System.out.println("Codepoint: " + (int)ch);
    }
for(int i=0;i
没有“UTF-8字符”或“十进制编码”之类的东西。“UTF-8”是一种编码,“decimal”是一种基数。你说得对。我已经修改了问题,干杯。我不懂Java,但因为你的字符在BMP中,它们只是字符串元素的文本值(Java有16位字符串)——你不能说
str[0]
,等等吗?实际上字符串中也有一些支持,这使它更简单了一点——请看我修改过的答案。@Jon Skeet:是的,字符串方法确实更好。我也同意,大多数时候这并不是一个真正的问题——除了古代的剧本(公众几乎不感兴趣),唯一感兴趣的似乎是一些数学和音乐符号。但这是一个难得的机会,可以挑剔一点;)基本问题是UTF-16是一种可变宽度编码,没有O(1)算法来确定字符串中的码点数,甚至可以检查字符串是否为有效的Unicode代码点序列。如果将其指向代理项对的中间,则
codePointAt
会做什么?@Kerrek:我相信它会返回低代理项,也就是说,当它找到高代理项时,它的行为会有所不同。