V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
V2EX  ›  nieyuanhong  ›  全部回复第 2 页 / 共 2 页
回复总数  26
1  2  
这个直接跟踪源码就理解了,比如 windows 下默认 gbk ,其他系统可能默认 utf-8 ,这些字符集都有一个重解析的问题。
具体来说就是解析时,有些 byte 组合是没有对应的字符的,而有些 byte 组合直接不符合编码标准,所以这些组合会被解析后映射到乱码字符。
这样经过转换为字符又转回数组,长度和值当然会不一样了。
要想保证这样两次解析不破坏信息,建议的方式是指定字符集解析为 iso8859-1 ,而为什么要选它呢?因为它仅有的 256 个字符和 byte 的 256 个值是严格一一对应的,这样无论如何互转,都不会产生映射混乱。

楼主可以自己试一试。

```java
var a1 = new byte[64];
new Random().nextBytes(a1); // 获取一些随机 byte 以供测试
System.out.println("a1:" + Base64.getEncoder().encodeToString(a1));
var tmp = new String(a1, StandardCharsets.ISO_8859_1);
System.out.println("a2:" + Base64.getEncoder().encodeToString(tmp.getBytes(StandardCharsets.ISO_8859_1)));

```
@GTim 如果 Lombok 不够,比如需要运算符重载,元编程,扩展方法,那就上 manifold https://github.com/manifold-systems/manifold
2022 年 12 月 18 日
回复了 iSNN 创建的主题 Java Java 怎么去掉这些奇怪的字符
感觉列举的例子有点少,你需要分析 abc 后边的奇怪字符的 ASCII 码,确定这些奇怪字符的码位范围,范围确定后就好办了,直接正则移除掉。当然如果奇怪的字符包括标点符号和英文字母以及汉字的话,就只能从前端找办法了。
Spirng bean 默认全局单例,也就是所有线程都共享一份 A 的实例,你如果在一处改了`param: B`,那所有线程下的成员变量`param: B`当然都会改变。
简单的做法就是用一个`Map`,以线程为键,`param: B` 为值,存放所有线程的`param: B`。
最后在 getter 和 setter 做下线程判断,就 OK 了。
2020 年 6 月 4 日
回复了 NUT 创建的主题 Java 一个 jvm 怎么同时运行多个 jar 包,有什么方案吗?
导出 war 包用 tomcat 部署?
2018 年 8 月 25 日
回复了 yrzx404 创建的主题 程序员 JDK 12 早期试用版发布了
@vjnjc 实际上 jdk8 也是支持 lambda 的, 或许你应该考虑换到 7
1  2  
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3277 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 21ms · UTC 12:30 · PVG 20:30 · LAX 05:30 · JFK 08:30
♥ Do have faith in what you're doing.