Кодировать строку в UTF-8 - PullRequest
       11

Кодировать строку в UTF-8

166 голосов
/ 20 апреля 2011

У меня есть строка с символом «-», и у меня есть некоторые проблемы с ней. Мне нужно закодировать эту строку в кодировку UTF-8. Я пробовал таким способом, но он не работает:

byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");

Как мне закодировать эту строку в utf-8?

Ответы [ 10 ]

162 голосов
/ 20 апреля 2011

Как насчет использования

ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString)
128 голосов
/ 20 апреля 2011

String объекты в Java используют кодировку UTF-16, которую нельзя изменить.

Единственное, что может иметь другую кодировку, это byte[]. Так что если вам нужны данные UTF-8, тогда вам нужно byte[]. Если у вас есть String, который содержит непредвиденные данные, то проблема в более раннем месте, которое неправильно преобразовало некоторые двоичные данные в String (т. Е. Использовалась неправильная кодировка).

69 голосов
/ 20 апреля 2011

Используйте byte[] ptext = String.getBytes("UTF-8"); вместо getBytes().getBytes() использует так называемую «кодировку по умолчанию», которая может не соответствовать UTF-8.

68 голосов
/ 27 ноября 2013

В Java7 вы можете использовать:

import static java.nio.charset.StandardCharsets.*;

byte[] ptext = myString.getBytes(ISO_8859_1); 
String value = new String(ptext, UTF_8); 

Это имеет преимущество перед getBytes(String) в том, что оно не объявляет throws UnsupportedEncodingException.

Если вы используете старую версию JavaВы можете объявить константы кодировки самостоятельно:

import java.nio.charset.Charset;

public class StandardCharsets {
    public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
    public static final Charset UTF_8 = Charset.forName("UTF-8");
    //....
}
31 голосов
/ 20 апреля 2011

Java String внутренне всегда кодируется в UTF-16 - но вы действительно должны думать об этом так: кодировка - это способ преобразования между строками и байтами.

Так что если у вас есть проблема с кодировкойК тому времени, когда у вас есть String, уже слишком поздно, чтобы исправить.Вам нужно исправить место, где вы создаете эту строку из файла, БД или сетевого подключения.

23 голосов
/ 20 апреля 2011

Вы можете попробовать это так.

byte ptext[] = myString.getBytes("ISO-8859-1"); 
String value = new String(ptext, "UTF-8"); 
8 голосов
/ 19 февраля 2015
String value = new String(myString.getBytes("UTF-8"));

и, если вы хотите прочитать из текстового файла с кодировкой «ISO-8859-1»:

String line;
String f = "C:\\MyPath\\MyFile.txt";
try {
    BufferedReader br = Files.newBufferedReader(Paths.get(f), Charset.forName("ISO-8859-1"));
    while ((line = br.readLine()) != null) {
        System.out.println(new String(line.getBytes("UTF-8")));
    }
} catch (IOException ex) {
    //...
}
7 голосов
/ 09 апреля 2018

Через мгновение я прошел через эту проблему и сумел решить ее следующим образом

сначала мне нужно импортировать

import java.nio.charset.Charset;

Затем я должен был объявить константу, чтобы использовать UTF-8 и ISO-8859-1

private static final Charset UTF_8 = Charset.forName("UTF-8");
private static final Charset ISO = Charset.forName("ISO-8859-1");

Тогда я мог бы использовать его следующим образом:

String textwithaccent="Thís ís a text with accent";
String textwithletter="Ñandú";

text1 = new String(textwithaccent.getBytes(ISO), UTF_8);
text2 = new String(textwithletter.getBytes(ISO),UTF_8);
3 голосов
/ 04 мая 2016

Я использовал приведенный ниже код для кодирования специального символа, указав формат кодирования.

String text = "This is an example é";
byte[] byteText = text.getBytes(Charset.forName("UTF-8"));
//To get original string from byte.
String originalString= new String(byteText , "UTF-8");
0 голосов
/ 09 декабря 2014

Это решило мою проблему

    String inputText = "some text with escaped chars"
    InputStream is = new ByteArrayInputStream(inputText.getBytes("UTF-8"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...