임의의 유니 코드 문자 열을 생성하려고합니다. 각각의 문자가 차지하는 바이트 수를 지정하고 싶습니다. (결국은 UTF-8 바이트 배열로 변환하기 때문에 1 ~ 4 바이트) 문자 수는 물론입니다. 예를 들어, 내가 문자 당 바이트로 내 문자열과 3의 문자 수로 (10)를 지정하면, 나는 문자열 str을 얻을해야 내가Java에서 3 바이트 (0x800에서 0xffff) UTF-8 인코딩 생성
str.getBytes(StandardCharsets.UTF_8).length
를 호출 할 때 나는 30 바이트를 얻어야한다.
내 코드는 1, 2 및 4 바이트를 사용하여 문자에 대해 올바른 문자열을 생성합니다. 그러나 0x800에서 0xffff까지의 코드 포인트에 대해 반환 된 문자열에서 getBytes를 호출하면 매번 다른 바이트 수를 얻게됩니다. 이것이 일어날 수있는 이유는 무엇입니까?
private String generateRandomString(int numberOfCharacters, int bytesPerCharacter) {
int start;
int end;
switch (bytesPerCharacter) {
case 1:
start = 0;
end = 0x7f;
break;
case 2:
start = 0x80;
end = 0x7ff;
break;
case 3:
start = 0x800;
end = 0xffff;
break;
case 4:
start = 0x10000;
end = 0x10ffff;
break;
default:
throw new ArgumentException("Invalid value for the bytes per character");
}
StringBuilder builder = new StringBuilder(numberOfCharacters);
int count = 0;
int range = end - start;
for (int i = 0; i < numberOfCharacters; i++) {
builder.appendCodePoint((int) (Math.random() * range + start));
}
return builder.toString();
}
발생하는 문제를 재현하지 못하는 것 같습니다. –
비 결정적입니다. 높은 numberOfCharacters (200 이상)로 시도하면 보통 재현 할 수 있습니다. – mewsicalcat