你好,我正在寻找一种方式,如果一个字符串已经被编码检查如果字符串包含编码的字符
例如
String name = "Hellä world";
String encoded = new String(name.getBytes("utf-8"), "iso8859-1");
这个encoded
变量的输出是检测:
Hellä world
正如你所看到的那样,有一个带有坟墓和另一个符号的A.有没有办法检查输出是否包含编码字符?
你好,我正在寻找一种方式,如果一个字符串已经被编码检查如果字符串包含编码的字符
例如
String name = "Hellä world";
String encoded = new String(name.getBytes("utf-8"), "iso8859-1");
这个encoded
变量的输出是检测:
Hellä world
正如你所看到的那样,有一个带有坟墓和另一个符号的A.有没有办法检查输出是否包含编码字符?
你的问题没有意义。 java String
是一个字符列表。他们没有编码,直到你将它们转换为字节,此时你需要指定一个编码(尽管你会看到很多使用平台默认的代码,例如String.getBytes()
没有参数)。我建议你阅读这个http://kunststube.net/encoding/。
这个答案是绝对正确的,但对于新手来说可能仍然有点神秘。这个问题实际上是“*如何判断一个字符串是否使用了某种编码进行编码?*”简短的回答是:试错法。您可以设置为特定目标编码(UTF-8/ISO-8859-1等)配置的“CharsetDecoder”,并尝试通过该解码器运行您的字符串。如果解码失败或抛出异常,您知道您的字符串包含1个以上不是目标编码的字符。如果解码器没有错误地解码,那么你知道你的String符合该编码的标准。 – 2013-08-27 12:44:19
String name = "Hellä world";
String encoded = new String(name.getBytes("utf-8"), "iso8859-1");
此代码只是一个字符损坏的错误。您采用UTF-16字符串,将其转码为UTF-8,假装为ISO-8859-1并将其转码回UTF-16,导致编码字符不正确。
我不太确定你想要做什么或者你的问题是什么。
此行没有任何意义:
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;
}
我想你只是测试如果字符串在“其他字母”unicode组中包含字符。但是,Character.getType('ä')== Character.LOWERCASE_LETTER和Character.getType('a')== Character.LOWERCASE_LETTER –
是的,因为我认为问题是如何找到一个字符串包含编码的字符或不,此方法返回 – Pooya
但Character.getType('ä')== Character.LOWERCASE_LETTER和Character.getType('ä')!= Character.OTHER_LETTER,因此您的代码不起作用。 Character.OTHER_LETTER不包含所有的Unicode字符,只包含特定的子组。 –
编码或不是如果我理解正确你的问题,这个代码可以帮助你。函数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"));
}
您还可以检查其他字符集字符集改变VAR或将它移动到一个参数。
听起来就像你想检查一个字符串是否可以在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中正确编码,那么[this existing question](http://stackoverflow.com/q/13144250/441108)(链接自这个问题的链接)看起来像答案。 –