Java 检查字符串是否包含编码字符

Java 检查字符串是否包含编码字符,java,encoding,utf-8,character-encoding,Java,Encoding,Utf 8,Character Encoding,您好,我正在寻找一种方法来检测字符串是否已被编码 比如说 String name = "Hellä world"; String encoded = new String(name.getBytes("utf-8"), "iso8859-1"); 此编码的变量的输出为: Hellä world 正如你所看到的,有一个带有坟墓和另一个符号的A。有没有办法检查输出是否包含编码字符?你的问题没有意义。java字符串是字符列表。在将它们转换为字节之前,它们没有编码,此时您需要指定一

您好,我正在寻找一种方法来检测字符串是否已被编码

比如说

    String name = "Hellä world";
    String encoded = new String(name.getBytes("utf-8"), "iso8859-1");
编码的
变量的输出为:

Hellä world

正如你所看到的,有一个带有坟墓和另一个符号的A。有没有办法检查输出是否包含编码字符?

你的问题没有意义。java
字符串是字符列表。在将它们转换为字节之前,它们没有编码,此时您需要指定一个(尽管您将看到许多代码使用平台默认值,这是例如
String.getBytes()
不带参数所做的)

我建议你读一下


这段代码只是一个字符损坏错误。您获取一个UTF-16字符串,将其转换为UTF-8,假装它是ISO-8859-1,然后将其转换回UTF-16,从而导致编码错误的字符。

我不确定您想做什么,或者您的问题是什么

这句话毫无意义:

String encoded = new String(name.getBytes("utf-8"), "iso8859-1");
您正在将您的
名称
编码为“UTF-8”,然后尝试解码为“iso8859-1”

如果您想将您的
名称
编码为“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;
}
公共布尔isEncoded(字符串输入){
char[]charArray=input.toCharArray();
for(int i=0,charArrayLength=charArray.length;i
如果我正确理解了您的问题,此代码可能会帮助您。函数isEncoded检查其参数是否可以编码为ascii或是否包含非ascii字符

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

您还可以检查其他字符集更改字符集变量或将其移动到参数。

听起来您想检查从拉丁语1中的字节解码的字符串是否也可以在UTF-8中解码。这很容易,因为非法字节序列被字符\ufffd替换:

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

所有字符都已编码。你是想知道一个字符是否被编码为两个字节或更多而不是一个字节吗?如果你想检查字符串
name
是否可以在ISO-8859-1中正确编码,那么(从这个问题的一个链接链接)看起来像是答案。我想你只是在测试字符串是否包含“其他字母”中的字符unicode组。但是Character.getType('ä')==Character.LOWERCASE字母和Character.getType('a')==Character.LOWERCASE字母是的,因为我认为问题是如何找到一个字符串是否包含编码的字符,并且这个方法返回thatBut Character.getType('ä')==Character.LOWERCASE字母和Character.getType('a')!=字符。其他字母,因此您的代码无效。Character.OTHER_字母不包含所有unicode字符,只包含特定的子组。这个答案绝对正确,但对新手来说可能仍然有点神秘。实际上,问题是“如何判断字符串是否已使用某种编码?”简短的回答是:反复试验。您可以设置为特定目标编码(UTF-8/ISO-8859-1等)配置的
CharsetDecoder
,并尝试通过该解码器运行字符串。如果解码失败或引发异常,您知道字符串包含1+个不是目标编码的字符。如果解码器解码没有错误,那么您知道您的字符串符合该编码的标准。
String recoded = new String(encoded.getBytes("iso-8859-1"), "UTF-8");
return recoded.indexOf('\uFFFD') == -1; // No replacement character found