Вопрос:
Мы требуем преобразования кодировки символов для одного из наших сервисов, наше требование состоит в том, чтобы извлекать символы в кодированном формате UTF-8 и затем конвертировать в EUC-JP, а затем готовить некоторые хэширования (на основе Groovy) jdk8.
В php аналогичное решение отлично подходит для нас и кодируется как,
$encodedToEucJp = mb_convert_encoding($inputStringWithUtf8, «EUC-JP»); Print_r(md5($encodedToEucJp));
Мы решили много способов решения, например,
Java.security.MessageDigest.getInstance(‘MD5) .digest(New String(inputStringWithUtf8.getBytes(«UTF-8»), «EUC-JP») .getBytes(«EUC-JP»)) .encodeHex() .toString();
Но это решение не сработало для некоторых символов, которые создают другой дайджест, а затем из нашего php-кодированного решения. Здесь упоминается несколько персонажей -, ĭ,? и т.д. Именно поэтому мы не смогли обработать тот же дайджест с одинаковым входом как в php, так и в java-системе.
Заранее спасибо.
Ответ №1
Ошибка в этой части кода:
New String(inputStringWithUtf8.getBytes(«UTF-8»), «EUC-JP»)
В основном, вы пытаетесь интерпретировать массив байтов UTF-8, как если бы он был закодирован в EUC-JP, что не имеет смысла.
Следующий код должен выполнять работу
Java.security.MessageDigest.getInstance(‘MD5) .digest(inputStringWithUtf8.getBytes(«EUC-JP»)) .encodeHex() .toString();