我有一个包含句子的字节数组。我需要将这个句子上的小写字母转换成大写字母。这是我做的功能:
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;
}
}
答案 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)