Java码点与代码单元

代码点和代码单元

代码点(code point):与一个编码表中的某个字符对应的代码值.

在Unicode标准中,代码点采用十六进制书写,并加上前缀U+,例U+0041就是字母A的代码点.
Unicode的代码点可以分成17个代码级别(code plane).第一个代码级别成为基本的多语言级别,代码点从U+0000到U+FFFF,其中包括了经典的Unicode代码.
其余的16个附加级别,代码点从U+10000到U+10FFFF,其中包括了一些辅助字符(增补字符).
在这里插入图片描述

简单理解:代码点是针对Unicode字符集而言的,一个代码点就是一个编号而已,表示一个数字映射一个字符。代码点就是每个字符的唯一身份(以Unicode而言),但Unicode并没有涉及到字符的储存,没有规定一个代码点的储存方式(UTF-8/UTF-16/UTF-32是几种计算机储存的方案),而代码单元指的是该方案最少需要多少个字节编码一个Unicode字符。UTF-8的代码单元是1个字节,UTF-16的代码单元是两个字节,UTF-32是4个字节。在Java中,字符内部使用的是UTF-16

示例:

package Test;

public class Test {
    public static void main(String[] args) {
        //在java中 char数据类型是一个采用UTF-16编码表示的Unicode代码单元
        //常用字符一个代码单元即可表示但是辅助字符通常要一对 𝕆 2个字符单元
        String a="hi𝕆"; //4个字符单元(char) 3个码点
        String b="\uD835\uDD46"; // 𝕆
        int n=a.length(); //以UTF-16编码表示给定字符串所需要的代码单元数量
        // 4
        var cpCount=a.codePointCount(0,a.length()); //实际长度->码点数量
        // 3
        //a.charAt(n)返回位置n的代码单元
        char s1=a.charAt(0);  // h
        char s2=a.charAt(1);  // i
        char s3=a.charAt(2);  // 强转为int 55349
        char s4=a.charAt(3);  // 强转为int 56646
        //得到第i个码点
        int i=2; //𝕆
        int index=a.offsetByCodePoints(0,i);
        int codePoint=a.codePointAt(index);
    }
}

在这里插入图片描述

结果符合。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要测试单点登录(SSO)的实现,你可以使用Java编写单元测试来验证登录功能是否正常工作。以下是一个简单的示例: 1. 首先,确保你的应用程序已经实现了单点登录功能,并且你已经有一个可以进行登录的页面。 2. 创建一个测试类,例如`SSOTest`,并在该类上添加`@RunWith(SpringRunner.class)`和`@SpringBootTest`注解,以便使用Spring Boot进行集成测试。 ```java import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestTemplate; @RunWith(SpringRunner.class) @SpringBootTest public class SSOTest { @Autowired private RestTemplate restTemplate; @Test public void testLogin() { String username = "your_username"; String password = "your_password"; // 构建登录请求 String loginUrl = "http://localhost:8080/login"; // 替换为你的登录页面URL String requestBody = "username=" + username + "&password=" + password; ResponseEntity<String> response = restTemplate.postForEntity(loginUrl, requestBody, String.class); // 验证登录结果 Assert.assertEquals(HttpStatus.OK, response.getStatusCode()); // 如果登录成功后,可以获取响应中的Cookie或其他标识来验证登录状态 // ... } } ``` 3. 在测试方法中,你可以使用`RestTemplate`执行登录请求,并验证返回的响应状态码和登录结果。 4. 运行测试类,你应该能够看到测试结果。如果登录成功,响应状态码应该是200 OK,并且可以根据实际情况验证登录状态。 请注意,这只是一个简单的示例,实际的测试可能会更加复杂,具体取决于你的应用程序的实现方式和需求。你可以根据自己的情况进行适当调整和扩展。另外,还可以使用其他测试工具和框架(如JUnit、MockMvc等)来进行更全面的测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值