如何在字符串中替换�

时间:2009-09-28 19:20:48

标签: java string encoding mojibake

我有一个包含字符的字符串�我无法正确替换它。

String.replace(“�”,“”);

不起作用,有没有人知道如何删除/替换字符串中的�??

10 个答案:

答案 0 :(得分:33)

这是Unicode替换字符\ uFFFD。 (info

这样的事情应该有效:

String strImport = "For some reason my �double quotes� were lost.";
strImport = strImport.replaceAll("\uFFFD", "\"");

答案 1 :(得分:16)

像这样的字符问题难以诊断,因为通过应用程序错误,错误配置,切割“禁止”等错误解释字符容易丢失信息。

当我(显然是其他人)看到它时,你已经粘贴了三个字符:

codepoint   glyph   escaped    windows-1252    info
=======================================================================
U+00ef      ï       \u00ef     ef,             LATIN_1_SUPPLEMENT, LOWERCASE_LETTER
U+00bf      ¿       \u00bf     bf,             LATIN_1_SUPPLEMENT, OTHER_PUNCTUATION
U+00bd      ½       \u00bd     bd,             LATIN_1_SUPPLEMENT, OTHER_NUMBER

要识别角色,请从this page下载并运行该程序。将您的角色粘贴到文本字段中,然后选择字形模式;将报告粘贴到您的问题中。它将帮助人们识别出有问题的角色。

答案 2 :(得分:10)

你要求更换字符“ ”,但对于我来说,这是三个字符'ï','¿'和'½'。这可能是您的问题......如果您在Java 1.5之前使用Java,那么您只能获得UCS-2字符,即只有前65K个UTF-8字符。根据其他注释,您正在寻找的字符很可能是' ',即Unicode替换字符。这是“用于替换其值在Unicode中未知或不可表示的传入字符”的字符。

实际上,看看Kathy的评论,你可能遇到的另一个问题是javac没有将你的.java文件解释为UTF-8,假设你是用UTF-8编写的。尝试使用:

javac -encoding UTF-8 xx.java

或者,修改您的源代码:

String.replaceAll("\uFFFD", "");

答案 3 :(得分:5)

正如其他人所说,你发布了3个字符而不是1个字符。我建议您运行这段代码,以查看字符串中实际上的内容:

public static void dumpString(String text)
{
    for (int i=0; i < text.length(); i++)
    {
        System.out.println("U+" + Integer.toString(text.charAt(i), 16) 
                           + " " + text.charAt(i));
    }
}

如果您发布结果,那么找出正在发生的事情会更容易。 (我没有打扰填充字符串 - 我们可以通过检查来做到这一点......)

答案 4 :(得分:0)

使用unicode escape sequence。首先,您必须找到您要替换的字符的代码点(我们只能说它是十六进制的ABCD):

str = str.replaceAll("\uABCD", "");

答案 5 :(得分:0)

for detail

import java.io.UnsupportedEncodingException;

/**
 * File: BOM.java
 * 
 * check if the bom character is present in the given string print the string
 * after skipping the utf-8 bom characters print the string as utf-8 string on a
 * utf-8 console
 */

public class BOM
{
    private final static String BOM_STRING = "Hello World";
    private final static String ISO_ENCODING = "ISO-8859-1";
    private final static String UTF8_ENCODING = "UTF-8";
    private final static int UTF8_BOM_LENGTH = 3;

    public static void main(String[] args) throws UnsupportedEncodingException {
        final byte[] bytes = BOM_STRING.getBytes(ISO_ENCODING);
        if (isUTF8(bytes)) {
            printSkippedBomString(bytes);
            printUTF8String(bytes);
        }
    }

    private static void printSkippedBomString(final byte[] bytes) throws UnsupportedEncodingException {
        int length = bytes.length - UTF8_BOM_LENGTH;
        byte[] barray = new byte[length];
        System.arraycopy(bytes, UTF8_BOM_LENGTH, barray, 0, barray.length);
        System.out.println(new String(barray, ISO_ENCODING));
    }

    private static void printUTF8String(final byte[] bytes) throws UnsupportedEncodingException {
        System.out.println(new String(bytes, UTF8_ENCODING));
    }

    private static boolean isUTF8(byte[] bytes) {
        if ((bytes[0] & 0xFF) == 0xEF && 
            (bytes[1] & 0xFF) == 0xBB && 
            (bytes[2] & 0xFF) == 0xBF) {
            return true;
        }
        return false;
    }
}

答案 6 :(得分:0)

解析时将编码更改为UTF-8。这将删除特殊字符

答案 7 :(得分:0)

剖析网址代码和unicode错误。这个符号也出现在我的亚美尼亚文本和有时破碎的缅甸语中的谷歌翻译。

答案 8 :(得分:-1)

profilage bas� sur l'analyse de l'esprit(法语)

应翻译为:

profilage basé sur l'analyse de l'esprit

因此,在这种情况下,� = é

答案 9 :(得分:-2)

以上答案无法解决我的问题。当我下载xml时,它会将<xml添加到我的xml中。我只是

xml = parser.getXmlFromUrl(url);

xml = xml.substring(3);// it remove first three character from string,

现在它正在准确运行。