c# - C# 中的 CodePointAt 等价物

标签 c# java unicode

我在 JAVA 中有这段代码并且工作正常

    String a = "ABC";
    System.out.println(a.length());
    for (int n = 0; n < a.length(); n++)
        System.out.println(a.codePointAt(n));

预期的输出是 3个 65 66 67 我对 a.length() 有点困惑,因为它应该以字符形式返回长度,但字符串必须以 16 位或任何 unicode 字符需要的形式存储每个 < 256 个字符。

但问题是我如何在 C# 中做同样的事情? 我需要扫描一个字符串并根据找到的一些 unicode 字符采取行动。

我真正需要翻译的代码是

    String str = this.getString();
    int cp;
    boolean escaping = false;
    for (int n = 0; n < len; n++)
    {
        //===================================================
        cp = str.codePointAt(n); //LOOKING FOR SOME EQUIVALENT IN C#
        //===================================================
        if (!escaping)
        {
          ....

       //Closing all braces below.

提前致谢。

我多么喜欢 JAVA :)。只需要交付一个Win APP,它是一个Java/Linux应用服务器的客户端。

最佳答案

准确的翻译应该是这样的:

string a = "ABC⤶"; //Let's throw in a rare unicode char
Console.WriteLine(a.Length);
for (int n = 0; n < a.Length; n++)
    Console.WriteLine((int)a[n]); //a[n] returns a char, which we can cast in an integer
//final result : 4 65 66 68 10550

在 C# 中,您根本不需要 codePointAt,您可以通过将字符转换为 int 来直接获取 unicode 编号(或者对于赋值,它被转换为含蓄地)。所以你可以简单地通过做得到你的cp

cp = (int)str[n];

我多么喜欢 C# :)

但是,这仅对低 Unicode 值有效。当您分解字符串时,代理项对被视为两个不同的字符,因此它们不会被打印为一个值。如果你确实需要处理UTF32,可以引用this answer , 基本上使用

int cp = Char.ConvertToUtf32(a, n);

在将循环递增 2 之后(因为它是用两个字符编码的),使用 Char.IsSurrogatePair()条件。

你的翻译会变成

string a = "ABC\U0001F01C";
Console.WriteLine(s.Count(x => !char.IsHighSurrogate(x)));
for (var i = 0; i < a.Length; i += char.IsSurrogatePair(a, i) ? 2 : 1)
    Console.WriteLine(char.ConvertToUtf32(a, i));

请注意从 s.Length() 到计数的一点 LINQ 的变化,因为代理被计为两个字符。我们简单地计算有多少字符不是更高的代理项以获得实际字符的明确计数。

关于c# - C# 中的 CodePointAt 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23751261/

相关文章:

c# - 如何在 Rx.Net 中实现排放映射处理程序?

c# - OpenXML 大数据集 excel 很慢

java - 应该兼容的不兼容通配符类型

java - Android - 以编程方式通过蓝牙发送图像

css - 元素符号表现得像软连字符

c# - Linq 列表比较和排除

c# - C# 中仅用于 0 到 255 之间数字的正则表达式语句

java - 公共(public)数学微分结果为0

excel - VBA - 将字符串转换为 UNICODE

xml - 以安全的 Rust 方式切片 XML 字符串