如何在字符串中替换�

Thy*_*hys 25 java string encoding mojibake

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

String.replace("�","");

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

Gun*_*r47 33

这是Unicode替换字符\ uFFFD.(信息)

这样的事情应该有效:

String strImport = "For some reason my ?double quotes? were lost.";
strImport = strImport.replaceAll("\uFFFD", "\"");
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,你知道它是双引号但技术上那些丢失的字符可以是其他一些字符,对吗? (10认同)
  • @Elzo:是的。从我的字符串来看,这两个字符可能以“和”开头,但可能还有许多其他东西。 (2认同)

McD*_*ell 16

像这样的字符问题难以诊断,因为通过应用程序错误,错误配置,cut'n'paste等错误解释字符容易丢失信息.

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

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
Run Code Online (Sandbox Code Playgroud)

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


Pau*_*and 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
Run Code Online (Sandbox Code Playgroud)

或者,修改您的源代码:

String.replaceAll("\uFFFD", "");
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 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));
    }
}
Run Code Online (Sandbox Code Playgroud)

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