在 Java 中进行编码转换通常涉及将一个字符集的文本数据转换为另一个字符集。以下是几种常见的实现方式,每种方式都附有详细的步骤流程和示例代码。
注意:示例代码中使用的是 Java 8 标准库,若要使用更高版本的 Java,请确保相应的库和方法没有发生变化。
步骤流程:
Charset.forName()
方法获取源编码和目标编码的 Charset
对象。Charset.encode()
将源编码的文本转换为字节序列。Charset.decode()
将字节序列解码为目标编码的文本。示例代码:
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
public class CharsetConversionExample {
public static void main(String[] args) {
String inputText = "Hello, 你好, 안녕하세요";
// Source and target charsets
Charset sourceCharset = StandardCharsets.UTF_8;
Charset targetCharset = StandardCharsets.ISO_8859_1;
// Convert to bytes using source charset
ByteBuffer byteBuffer = sourceCharset.encode(inputText);
// Convert bytes to text using target charset
CharBuffer charBuffer = targetCharset.decode(byteBuffer);
String outputText = charBuffer.toString();
System.out.println("Input Text: " + inputText);
System.out.println("Converted Text: " + outputText);
}
}
步骤流程:
InputStreamReader
读取源编码的输入流,并指定源编码。OutputStreamWriter
创建目标编码的输出流,并指定目标编码。示例代码:
import java.io.*;
public class InputStreamReaderExample {
public static void main(String[] args) {
String inputText = "Hello, 你好, 안녕하세요";
// Source and target charsets
Charset sourceCharset = Charset.forName("UTF-8");
Charset targetCharset = Charset.forName("ISO-8859-1");
try (
InputStream inputStream = new ByteArrayInputStream(inputText.getBytes(sourceCharset));
InputStreamReader reader = new InputStreamReader(inputStream, sourceCharset);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(outputStream, targetCharset)
) {
char[] buffer = new char[1024];
int bytesRead;
while ((bytesRead = reader.read(buffer)) != -1) {
writer.write(buffer, 0, bytesRead);
}
writer.flush();
String outputText = outputStream.toString(targetCharset.name());
System.out.println("Input Text: " + inputText);
System.out.println("Converted Text: " + outputText);
} catch (IOException e) {
e.printStackTrace();
}
}
}
这两种方法不需要任何额外的第三方库,因此不需要添加任何依赖。
上述示例中所使用的都是 Java 标准库的类和方法,无需添加其他库。