2

文を含むバイトの配列があります。この文の小文字を大文字に変換する必要があります。これが私がした関数です:

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

5 に答える 5

2

バイト配列を文字列に変換し、エンコーディングをサポートします。次に、を呼び出しますtoUpperCase()。次に、大文字にした後にバイト配列として必要な場合は、文字列に対してgetBytes()を呼び出すことができます。

于 2012-09-12T18:19:44.687 に答える
2

単純に使用することはできません:

String s = new String(bytes, "cp1252");
String upper = s.toUpperCase(someLocale);
于 2012-09-12T18:19:09.863 に答える
2

byte[]を文字列に「デコード」する必要があります。これを行うためのAPIはいくつかありますが、バイトに使用される文字エンコードを指定する必要があります。エンコーディングを使用しないオーバーロードされたバージョンは、プラットフォームのデフォルトを使用するため、マシンごとに異なる結果をもたらします。

たとえば、バイトがWindows-1252(ANSIと呼ばれることもあります)でエンコードされていると判断した場合です。

String s = new String(bytes, "Windows-1252"); 
String upper = s.toUpperCase();
于 2012-09-12T18:23:06.980 に答える
0

文字セットを変更すると、変換前にトリックが実行されませんか?Javaの内部変換ロジックは正常に機能する可能性があります。http://www.exampledepot.com/egs/java.nio.charset/ConvertChar.htmlのようなものですが、ターゲット文字セットとしてASCIIを使用します。

于 2012-09-12T18:21:27.957 に答える
0

私はこのテーブルを見ています:

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

ただし、227を超えるものはすべて文字のように見えますが、大文字にするには、ASCII値から27を減算します。

于 2012-09-12T18:21:28.557 に答える