如何将“ç”等字符识别为字母?

时间:2012-09-12 18:16:17

标签: java cp1252

我有一个包含句子的字节数组。我需要将这个句子上的小写字母转换成大写字母。这是我做的功能:

 public void CharUpperBuffAJava(byte[] word) {
     for (int i = 0; i < word.length; i++) {
        if (!Character.isUpperCase(word[i]) && Character.isLetter(word[i])) {
            word[i] -= 32;
        }
     }
    return cchLength;
 }

它可以正常使用句子:“一杯水”。问题是它必须适用于所有ANSI字符,包括“ç,á,é,í,ó,ú”等。 Character.isLetter方法不适用于这些字母,因此它们不会转换为大写。

您知道如何将这些ANSI字符标识为Java中的字母?

修改

如果有人想知道,我会在答案后再次采用方法,现在它看起来像这样:

public static int CharUpperBuffAJava(byte[] lpsz, int cchLength) {
    String value;
    try {
        value = new String(lpsz, 0, cchLength, "Windows-1252");
        String upperCase = value.toUpperCase();
        byte[] bytes = upperCase.getBytes();
        for (int i = 0; i < cchLength; i++) {
            lpsz[i] = bytes[i];
        }
        return cchLength;
    } catch (UnsupportedEncodingException e) {
        return 0;
    }
}

5 个答案:

答案 0 :(得分:2)

你不能简单地使用:

String s = new String(bytes, "cp1252");
String upper = s.toUpperCase(someLocale);

答案 1 :(得分:2)

将字节数组转换为字符串,支持编码。然后拨打toUpperCase()。然后,如果在大写后需要它作为字节数组,则可以在字符串上调用getBytes()

答案 2 :(得分:2)

您需要将byte[]“解码”为字符串。有几个API可以执行此操作,但必须指定用于字节的字符编码。不使用编码的重载版本将在不同的计算机上提供不同的结果,因为它们使用平台默认值。

例如,如果确定字节是使用Windows-1252(有时称为ANSI)编码的。

String s = new String(bytes, "Windows-1252"); 
String upper = s.toUpperCase();

答案 3 :(得分:0)

在转换之前不会更改字符集吗? Java的内部转换逻辑可能正常工作。像http://www.exampledepot.com/egs/java.nio.charset/ConvertChar.html之类的东西,但是使用ASCII作为目标字符集。

答案 4 :(得分:0)

我正在看这张桌子:

http://slayeroffice.com/tools/ascii/

但是有什么&gt; 227似乎是一个字母,但为了使其大写,你将从ASCII值中减去27。