Как проверить, является ли символ из указанной c кодировки в Java? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть метод, который преобразует строку из файла из данного набора символов (utf-8 или latin1) в другой. При переводе с utf-8 на latin1 я должен показывать только те символы, которые не могли быть преобразованы (поскольку именно это происходит при попытке перехода с utf-8 на latin1). Мне интересно проверить, как один символ был или не был продан.

 private String transcodeLineFromTo(String string, Charset fromCharset, Charset toCharset) {
        try {
            ByteBuffer inputBuffer = ByteBuffer.wrap(string.getBytes(fromCharset));
            CharBuffer data = fromCharset.decode(inputBuffer);
            ByteBuffer outputBuffer = toCharset.encode(data);

            byte[] outputData = outputBuffer.array();
            String originalLine  = new String(outputData);
            String convertedLine = new String(outputData, toCharset);
            StringBuilder notEncoded = new StringBuilder();
            char[] lineCharacters = convertedLine.toCharArray();
            for (char ch : lineCharacters) {
                if () {
                    notEncoded.append();
                }
            }
            if (!notEncoded.toString().equals("")) {
                return notEncoded.toString();
            } else {
                return convertedLine;
            }
        } catch (Exception e) {
            throw new IllegalStateException(e);
        }
    }

1 Ответ

1 голос
/ 29 апреля 2020

Вы можете проверить, возможно ли это закодировать, вызвав функцию Charset canEncode. Попробуйте с этим:

private String transcodeLineFromTo(String string, Charset fromCharset, Charset toCharset) {
        try {
            StringBuilder notEncoded = new StringBuilder();
            char[] lineCharacters = string.toCharArray();
            for (char ch : lineCharacters) {
                if (!toCharset.newEncoder().canEncode(ch)) {
                    notEncoded.append(ch);
                }
            }
            if (!notEncoded.toString().equals("")) {
                return notEncoded.toString();
            } else {
                return new String(toCharset.newEncoder().encode(fromCharset.decode(ByteBuffer.wrap(string.getBytes(fromCharset)))).array(),toCharset);
            }
        } catch (Exception e) {
            throw new IllegalStateException(e);
        }
    }
...