protected static ID3Comment getComment(byte[] data, int offset, int length) {
        // Comments must have an encoding
        int encodingFlag = data[offset];
        if (encodingFlag >= 0 && encodingFlag < encodings.length) {
            // Good, valid flag
        } else {
            // Invalid string
            return null;
        }

        TextEncoding encoding = encodings[encodingFlag];

        // First is a 3 byte language
        String lang = getString(data, offset + 1, 3);

        // After that we have [Desc]\0(\0)[Text]
        int descStart = offset + 4;
        int textStart = -1;
        String description = null;
        String text = null;

        // Find where the description ends
        try {
            for (int i = descStart; i < offset + length; i++) {
                if (encoding.doubleByte && data[i] == 0 && data[i + 1] == 0) {
                    // Handle LE vs BE on low byte text
                    if (i + 2 < offset + length && data[i + 1] == 0 && data[i + 2] == 0) {
                        i++;
                    }
                    textStart = i + 2;
                    description = new String(data, descStart, i - descStart, encoding.encoding);
                    break;
                }
                if (!encoding.doubleByte && data[i] == 0) {
                    textStart = i + 1;
                    description = new String(data, descStart, i - descStart, encoding.encoding);
                    break;
                }
            }

            // Did we find the end?
            if (textStart > -1) {
                text = new String(data, textStart, offset + length - textStart, encoding.encoding);
            } else {
                // Assume everything is the text
                text = new String(data, descStart, offset + length - descStart, encoding.encoding);
            }

            // Return
            return new ID3Comment(lang, description, text);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("Core encoding " + encoding.encoding + " is not available",
                    e);
        }
    }
Builds up the ID3 comment, by parsing and extracting
the comment string parts from the given data.
tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/mp3/ID3v2Frame.java