基于Java本实现,见笑了,其实底层依赖不同的操作系统。
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
/**
* 字符串编码转换器
*/
public class CharTransfer {
private InputStreamReader inputStreamReader;
private OutputStreamWriter outputStreamWriter;
private ByteArrayOutputStream byteArrayOutputStream;
public static CharTransfer getInstance() {
return new CharTransfer();
}
/**
* 字符串编码转换
*
* @param src 需转换编码字符串
* @param srcCharset 原始编码
* @param targetCharset 目标编码
* @return
*/
public String transfer(String src, String srcCharset, String targetCharset) {
try {
inputStreamReader = new InputStreamReader(new ByteArrayInputStream(src.getBytes(srcCharset)), srcCharset);
byteArrayOutputStream = new ByteArrayOutputStream();
outputStreamWriter = new OutputStreamWriter(byteArrayOutputStream, targetCharset);
char[] c = new char[1024];
int len;
while ((len = inputStreamReader.read(c)) != -1) {
outputStreamWriter.write(c, 0, len);
}
outputStreamWriter.flush();
return byteArrayOutputStream.toString(targetCharset);
} catch (Exception ignored) {
} finally {
this.release();
}
return null;
}
private void release() {
try {
if (byteArrayOutputStream != null) {
byteArrayOutputStream.close();
}
if (outputStreamWriter != null) {
outputStreamWriter.close();
}
if (inputStreamReader != null) {
inputStreamReader.close();
}
} catch (Exception e) {
log.error("close stream error:{}", e.getMessage());
}
}
}