六位数字的Unicode转义值比较(Six digit unicode escaped value

2019-07-02 17:10发布

我有一个六位数的Unicode字符,例如U+100000我想提出与另一个比较char在我的C#代码。

我在阅读MSDN文档的是,这个角色不能被代表char ,而必须由代表string

在U + 10000至U + 10FFFF范围内的Unicode字符不是以字符允许文字和在字符串文本使用Unicode代理对被表示

我觉得我失去了一些东西很明显,但你怎么能得到后续比较正常工作:

public bool IsCharLessThan(char myChar, string upperBound)
{
    return myChar < upperBound; // will not compile as a char is not comparable to a string
}

Assert.IsTrue(AnExample('\u0066', "\u100000"));
Assert.IsFalse(AnExample("\u100000", "\u100000")); // again won't compile as this is a string and not a char

编辑

K,我想我需要两个方法,一个接受字符和其他接受“大字符”,即字符串。 所以:

public bool IsCharLessThan(char myChar, string upperBound)
{
    return true; // every char is less than a BigChar
}

public bool IsCharLessThan(string myBigChar, string upperBound)
{
    return string.Compare(myBigChar, upperBound) < 0;
}

Assert.IsTrue(AnExample('\u0066', "\u100000));
Assert.IsFalse(AnExample("\u100022", "\u100000"));

Answer 1:

要使用字符串字面构建与Unicode代码点U + 10FFFF一个字符串,你需要制定出代理对参与其中。

在这种情况下,您需要:

string bigCharacter = "\uDBFF\uDFFF";

或者你可以使用char.ConvertFromUtf32

string bigCharacter = char.ConvertFromUtf32(0x10FFFF);

目前尚不清楚你希望你的方法来实现的,但如果你需要用它来不是在BMP文字工作,你需要使它接受int而不是charstring

按照该文件string ,如果你想字符遍历字符串中的作为完整的Unicode值,使用TextElementEnumeratorStringInfo

请注意, 需要明确地做到这一点。 如果你只是使用序号值,它会检查UTF-16代码单元,而不是UTF-32代码点。 例如:

string text = "\uF000";
string upperBound = "\uDBFF\uDFFF";
Console.WriteLine(string.Compare(text, upperBound, StringComparison.Ordinal));

这种打印出的值大于零,说明text是大于upperBound这里。 相反,你应该使用char.ConvertToUtf32

string text = "\uF000";
string upperBound = "\uDBFF\uDFFF";
int textUtf32 = char.ConvertToUtf32(text, 0);
int upperBoundUtf32 = char.ConvertToUtf32(upperBound, 0);
Console.WriteLine(textUtf32 < upperBoundUtf32); // True

所以,这可能是你需要在你的方法做什么。 您可能需要使用StringInfo.LengthInTextElements检查字符串真的是一个UTF-32代码点第一。



Answer 2:

从https://msdn.microsoft.com/library/aa664669.aspx ,你必须使用\U满8个十六进制数字。 因此,例如:

string str1 = "\U0001F300";
string str2 = "\uD83C\uDF00";
bool eq = str1 == str2;

使用:旋风:表情符号。



文章来源: Six digit unicode escaped value comparison