我如何更改看起来相同的字符串字节
how can i change bytes of string that look the same
我要检查文件名长度
当我检查从 mac 中获得的文件名长度与我在 IDE(Intellij) 中输入的名称长度不同时。
所以,我取出字符串的字节并将其打印到控制台,但它是不同的。
我想要的案例是长度,就像我输入 IDE 一样。
这可能吗?
我如何将字符串的 java 字节从 macString 更改为 IDEString
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) {
String fileNameFromMac = "스크린샷.png";
String typedInIDE = "스크린샷.png";
System.out.println("File Name From Mac Length : " + fileNameFromMac.length());
System.out.println("typedInIDE : " + typedInIDE.length());
byte[] fileNameFromMacBytes = fileNameFromMac.getBytes(StandardCharsets.UTF_8);
byte[] typedInIDEBytes = typedInIDE.getBytes(StandardCharsets.UTF_8);
for(byte b : fileNameFromMacBytes) {
System.out.print(b);
}
System.out.println();
for(byte b : typedInIDEBytes) {
System.out.print(b);
}
}
}
这是 Unicode normalization 的区别。规范化为相同形式后,它们将具有相同的长度(和相同的字节数):
import java.text.Normalizer;
public class Main {
public static void main(String[] args) {
String fromMac = "스크린샷.png";
String fromIDE = "스크린샷.png";
System.out.println("From Mac length: " + fromMac.length());
System.out.println("From IDE length: " + fromIDE.length());
String normFromMac = Normalizer.normalize(fromMac, Normalizer.Form.NFD);
String normFromIDE = Normalizer.normalize(fromIDE, Normalizer.Form.NFD);
System.out.println("Normalized from Mac length: " + normFromMac.length());
System.out.println("Normalized from IDE length: " + normFromIDE.length());
}
}
这会产生以下输出:
From Mac length: 14
From IDE length: 8
Normalized from Mac length: 14
Normalized from IDE length: 14
有关详细信息,请参阅 Oracle Java Tutorial。
我要检查文件名长度
当我检查从 mac 中获得的文件名长度与我在 IDE(Intellij) 中输入的名称长度不同时。
所以,我取出字符串的字节并将其打印到控制台,但它是不同的。
我想要的案例是长度,就像我输入 IDE 一样。
这可能吗?
我如何将字符串的 java 字节从 macString 更改为 IDEString
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) {
String fileNameFromMac = "스크린샷.png";
String typedInIDE = "스크린샷.png";
System.out.println("File Name From Mac Length : " + fileNameFromMac.length());
System.out.println("typedInIDE : " + typedInIDE.length());
byte[] fileNameFromMacBytes = fileNameFromMac.getBytes(StandardCharsets.UTF_8);
byte[] typedInIDEBytes = typedInIDE.getBytes(StandardCharsets.UTF_8);
for(byte b : fileNameFromMacBytes) {
System.out.print(b);
}
System.out.println();
for(byte b : typedInIDEBytes) {
System.out.print(b);
}
}
}
这是 Unicode normalization 的区别。规范化为相同形式后,它们将具有相同的长度(和相同的字节数):
import java.text.Normalizer;
public class Main {
public static void main(String[] args) {
String fromMac = "스크린샷.png";
String fromIDE = "스크린샷.png";
System.out.println("From Mac length: " + fromMac.length());
System.out.println("From IDE length: " + fromIDE.length());
String normFromMac = Normalizer.normalize(fromMac, Normalizer.Form.NFD);
String normFromIDE = Normalizer.normalize(fromIDE, Normalizer.Form.NFD);
System.out.println("Normalized from Mac length: " + normFromMac.length());
System.out.println("Normalized from IDE length: " + normFromIDE.length());
}
}
这会产生以下输出:
From Mac length: 14
From IDE length: 8
Normalized from Mac length: 14
Normalized from IDE length: 14
有关详细信息,请参阅 Oracle Java Tutorial。