【发布时间】:2014-09-23 21:09:33
【问题描述】:
这类似于this question,但我特别需要知道如何转换为 ISO-8859-1 格式,而不是 UTF-8。
简短的问题:我需要一个将分音符组合转换为拉丁语 1 等价物(如果存在)的字符。
更长的问题:我的德语字符串包含组合分音符号(UTF-8:[cc][88] AKA UTF 代码点 U+0308),但我的数据库仅支持 ISO-8859-1(例如 Latin-1) .因为字符/组合分音符被“分解”,我不能只是“转换”为 ISO-8859-1,因为字节序列 [cc][88] 作用于前面的字符,在 ISO 中可能没有对应的字符-8859-1。
我试过这段代码:
import java.nio.charset.Charset;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
//ü has combining diaereses
String s = "für"
Charset utf8charset = Charset.forName("UTF-8");
Charset iso88591charset = Charset.forName("ISO-8859-1");
ByteBuffer inputBuffer = ByteBuffer.wrap(s.getBytes());
// decode UTF-8
CharBuffer data = utf8charset.decode(inputBuffer);
// encode ISO-8559-1
ByteBuffer outputBuffer = iso88591charset.encode(data);
byte[] outputData = outputBuffer.array();
isoString = new String(outputData);
//isoString is "fu?r"
但它只是无法对组合分音符号进行编码,而不是看到它可以转换为 U+00F6/[c3][bc]。是否有一个库可以检测一个字符后跟分音符号何时可以映射到现有的 ISO-8859-1 字符? (最好是Java)
【问题讨论】:
标签: java encoding utf-8 iso-8859-1