簡體   English   中英

檢查String是否包含編碼字符

[英]Check if a String contains encoded characters

您好我正在尋找一種方法來檢測字符串是否被編碼

例如

    String name = "Hellä world";
    String encoded = new String(name.getBytes("utf-8"), "iso8859-1");

這個encoded變量的輸出是:

Hellä world

正如你所看到的,有一個帶有墳墓和另一個符號的A. 有沒有辦法檢查輸出是否包含編碼字符?

聽起來你想要檢查從latin1中的字節解碼的字符串是否也可以用UTF-8解碼。 這很簡單,因為非法字節序列被字符\\ ufffd替換:

String recoded = new String(encoded.getBytes("iso-8859-1"), "UTF-8");
return recoded.indexOf('\uFFFD') == -1; // No replacement character found

你的問題沒有意義。 java String是一個字符列表。 在將它們轉換為字節之前,它們沒有編碼,此時你需要指定一個(盡管你會看到許多使用平台默認的代碼,例如沒有參數的String.getBytes() )。

我建議你閱讀這篇http://kunststube.net/encoding/

String name = "Hellä world";
String encoded = new String(name.getBytes("utf-8"), "iso8859-1");

這段代碼只是一個字符損壞錯誤。 您使用UTF-16字符串,將其轉碼為UTF-8,假裝它是ISO-8859-1並將其轉碼回UTF-16,導致字符編碼錯誤。

如果我正確理解了您的問題,此代碼可能會對您有所幫助。 函數isEncoded檢查其參數是否可以編碼為ascii或者是否包含非ascii-chars。

public boolean isEncoded(String text){

    Charset charset = Charset.forName("US-ASCII");
    String checked=new String(text.getBytes(charset),charset);
    return !checked.equals(text);

}

@Test
public void testAscii() throws Exception{
    Assert.assertFalse(isEncoded("Hello world"));
}


@Test
public void testNonAscii() throws Exception{
    Assert.assertTrue(isEncoded("Hellä world"));
}

您還可以檢查其他字符集更改charset var或將其移動到參數。

我不確定你想做什么或者你的問題是什么。

這條線沒有任何意義:

String encoded = new String(name.getBytes("utf-8"), "iso8859-1");

您將您的name編碼為“UTF-8”,然后嘗試解碼為“iso8859-1”。

如果您將name編碼為“iso8859-1”,只需執行name.getBytes("iso8859-1")

請告訴我們您遇到的問題是什么,以便我們可以提供更多幫助。

您可以通過此代碼檢查您的字符串是否已編碼

public boolean isEncoded(String input) {

    char[] charArray = input.toCharArray();
    for (int i = 0, charArrayLength = charArray.length; i < charArrayLength; i++) {
        Character c = charArray[i];
        if (Character.getType(c) == Character.OTHER_LETTER)){
            return true;
        }
    }
    return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM