比较C#中的日文字符

时间:2016-03-03 06:43:24

标签: c# string

我正在检查日语字符串中的空格并用“_”替换它们。 这就是我在做的事情:

string input1="abc  dfg";
string input2="尾え れ";
if(input1.Contains(" "))
{
  Console.WriteLine(input1.Replace(" ","_"));
}
Console.WriteLine("------------------");
if(input2.Contains(" "))
{
  Console.WriteLine(input2.Replace(" ","_"));
}

以下是此代码的输出

abc__dfg
------------------

它在简单的英文字符串中用“_”替换空格,但在日语字符串中却没有。

4 个答案:

答案 0 :(得分:9)

因为input2中的外观空间不是空间,只需检查它的ascii代码

Console.WriteLine(Convert.ToInt32(' ')); // output: 12288
Console.WriteLine(Convert.ToInt32(' ')); // output: 32

string input1 = "abc  dfg";
string input2 = "尾え れ"; // a space
string input3 = "尾え れ"; // not a space
if (input1.Contains(" "))
{
    Console.WriteLine(input1.Replace(" ", "_"));
}
Console.WriteLine("------------------");
if (input2.Contains(" "))
{
    Console.WriteLine(input2.Replace(" ", "_"));
}
Console.WriteLine("------------------");
if (input3.Contains(" "))
{
    Console.WriteLine(input3.Replace(" ", "_"));
}

@Ronan Thibaudau 的原始解释:

  

因为它不是一个空格,它不是同一个角色,复制你   从输入2字符串调用“空格”并将其粘贴到   input2.replace方法,它会工作,它只是不一样   字符作为您键入的空格(即使我尝试在此处选择它)   stackoverflow它是input1中空格的两倍,所以它   不能是同一个字符)

答案 1 :(得分:1)

如果您不想担心使用ASCII代码或复制粘贴字符而不知道如何期待,请执行以下操作:

const char

答案 2 :(得分:0)

很可能您的控制台字体不支持和/或(默认)代码页不支持日文字符。

尝试

     Console.WriteLine(Console.OutputEncoding.EncodingName);
     Console.WriteLine(Console.OutputEncoding.CodePage);
     Console.WriteLine(input2);
     Debug.Write(input2);

进行比较。选择支持日文字符的字体和代码页,例如

Console.OutputEncoding = Encoding.UTF8;

要更改控制台的默认代码页,请查看以下答案:Unicode characters in Windows command line - how?

关于字符串本身: 将字符串尾え れ复制/粘贴到此方:Unicode code converter。 Unicode代码点为U+5C3E U+3048 U+3000 U+308C

U+3000Ideographic Space,而不是“普通”空格U+0020

答案 3 :(得分:0)

将这段代码用于第二个字符串,它将起作用。经过测试,它返回正确的输出。

    if (input2.Contains(string.Empty))
    {
        string cleanedString = System.Text.RegularExpressions.Regex.Replace(input2, @"\s+", "_");
        Console.WriteLine(cleanedString);
    }