在我的应用程序中,会生成动态长字符串。这些值我保存在具有最大长度的数据库中。当超过最大长度时,使用自定义代码拆分字符串,并在数据库中插入新行。
使用多字节字符时会出现此问题。如果一个单词在元音符号(matra)处被分割,那么在字符串的分割处,它会生成一个垃圾符号,如钻石,其间带有问号。
int blockSize = 12;
String str1 = "<SOME STRING>";
byte[] b = str1.getBytes("UTF-8");
int loopCount = x; // in actual code dynamically generated
String outString = "";
for (int i = 0; i <= loopCount; i++) {
if (i != loopCount) {
outString = new String(b, i * blockSize, blockSize, "UTF-8");
} else {
outString =
new String(b, i * blockSize, (b.length - loopCount * blockSize));
}
}
答案 0 :(得分:0)
Unicode中构思的文本在几个层面上存在问题。
纯文本由Unicode 代码点组成。
ĉ
可以表示为一个代码点U + 109,以UTF-16(二进制格式)表示为一个char
'\ u0109', or as
c plus a zero-width so called combining diacritical mark for
^ {{1 java.text.Normalizer`可以规范化为组合或分解形式。然后在使用文本的一部分时要考虑从左到右和从右到左的标记。
在 UTF-16 级别,java . So splitting between code points already is problematic.
,一些代码点需要2个字符,即所谓的代理项对。这在使用char
的java中是可测试的。 Character类和正则表达式Character
具有相当好的Unicode支持。人们可以找到类似变音符号的类别。
在 UTF-8 级别,某些(非ASCII)字符或代码点需要多字节序列,因此拆分字节数组会导致分裂点处出现UTF-8非法垃圾。
解决方案?
Pattern
可能是c
,也要考虑移位边界缓冲区。