将大写字母编码为UTF-8

时间:2018-07-02 16:44:43

标签: java encoding utf-8 uppercase

我正在使用以下代码更改字符串文本,因此它使用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

我不明白这是什么问题,请帮助!

1 个答案:

答案 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);

结果:

The result…


修改

所以您确实做了这样的更改?

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;
}