我正在使用以下代码更改字符串文本,因此它使用UTF-8格式。
public String encodeUTF(String text){
byte[] ptext = text.getBytes(ISO_8859_1);
String value = new String(ptext, UTF_8);
return value;
}
在大多数情况下,字符串会正确编码,除非字符串的字母带有重音大写。
例如: 这是一个已转换的文本:Alfredo ArayaJiménez,但是当我尝试转换相同的文本但使用大写字母时,这是给我的:ALFREDO ARAYA JIM.?NEZ
我不明白这是什么问题,请帮助!
答案 0 :(得分:0)
我看到了问题。您无法使用一种编码方式将字符串编码为字节,而无法使用另一种编码方式将其解码。如果要从/向UTF-8字符串转换一些字节,请使其单向。 Java String类也使用不同的编码。该转换仅在从Java字符串到Java字符串的转换期间才有效(适用)…如果要将某项从UTF-8转换为Java String,请将其首先放入bytes数组(逐字节或通过从流中读取),然后执行它...
为了显示问题,我在您的框架中运行了代码行。 (您很幸运,您的控制台或其他内容的编码在小写版本中显示了正确的é。)
我框架中的代码
String text = "Alfredo Araya Jiménez";
byte[] ptext = text.getBytes(ISO_8859_1);
String incorrectValue = new String(ptext, UTF_8);
World.writeLine(incorrectValue);
String correctValue = new String(ptext, ISO_8859_1);
World.writeLine(correctValue);
text = "ALFREDO ARAYA JIMÉNEZ";
ptext = text.getBytes(ISO_8859_1);
incorrectValue = new String(ptext, UTF_8);
World.writeLine(incorrectValue);
correctValue = new String(ptext, ISO_8859_1);
World.writeLine(correctValue);
结果:
修改
所以您确实做了这样的更改?
public String encodeUTF(String text)
{
byte[] ptext = text.getBytes(ISO_8859_1);
String value = new String(ptext, ISO_8859_1);
return value;
}
实际上,您需要这样的东西(如果您想在Java中使用“文本”):
public String encodeUTF(byte[] ptext)
{
String value = new String(ptext, ISO_8859_1);
return value;
}
但是在这种情况下,您的方法没有意义(您知道吗?)……您需要首先将“文本”转换为字节,然后需要将其转换为正确的Java字符串并在Java中使用它(仅在Java中) 。 Java可与UTF-16配合使用(如 Tom Blodget 在8小时前指出的那样)。
如果您需要将其转换为UTF-8,则必须像这样“导出”它:
public byte[] encodeUTF(byte[] ptext)
{
String value = new String(ptext, ISO_8859_1);
byte[] utf8Text = value.getBytes(UTF_8);
return utf8Text;
}