in gflog-core/src/main/java/com/epam/deltix/gflog/core/util/Formatting.java [584:617]
public static int formatUtf8String(final @Nonnull String value,
@Nonnegative int start,
final @Nonnegative int end,
final @Nonnull byte[] array,
@Nonnegative int offset) {
// Preconditions:
// assert value != null;
// assert start <= end && start >=0 && end >= 0;
// assert array != null;
// assert offset >= 0;
for (; start < end; start++) {
final char c = value.charAt(start);
if (c <= 0x007F) {
array[offset++] = (byte) c;
} else if (c <= 0x07FF) {
array[offset++] = (byte) (0b11000000 | c >> 6);
array[offset++] = (byte) (0b10000000 | c & 0b111111);
} else if (!Character.isSurrogate(c)) {
array[offset++] = (byte) (0b11100000 | c >> 12);
array[offset++] = (byte) (0b10000000 | c >> 6 & 0b111111);
array[offset++] = (byte) (0b10000000 | c & 0b111111);
} else {
final int code = codePointAt(value, start++, end);
array[offset++] = (byte) (0b11110000 | code >> 18);
array[offset++] = (byte) (0b10000000 | code >> 12 & 0b111111);
array[offset++] = (byte) (0b10000000 | code >> 6 & 0b111111);
array[offset++] = (byte) (0b10000000 | code & 0b111111);
}
}
return offset;
}