C# c中等价的代码点#
我用JAVA编写了这段代码,效果很好C# c中等价的代码点#,c#,java,unicode,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)); String a=“ABC”; System.out.println(a.length()); 对于(int n=0;n
String a = "ABC";
System.out.println(a.length());
for (int n = 0; n < a.length(); n++)
System.out.println(a.codePointAt(n));
String a=“ABC”;
System.out.println(a.length());
对于(int n=0;n
输出与预期一致
3.
65
66
67
我对d.length()有点困惑,因为它可以以字符的形式返回长度,但字符串必须以16位或unicode字符所需的任何形式存储每个<256个字符
但问题是我怎样才能做同样的事情?。
我需要扫描字符串并根据找到的一些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.
String str=this.getString();
int-cp;
布尔转义=假;
对于(int n=0;n
提前谢谢
我多么喜欢JAVA:)。只需要提供一个Win应用程序,它是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:)
但是,这仅对较低的Unicode值有效。分解字符串时,代理项对作为两个不同的字符处理,因此它们不会作为一个值打印。如果确实需要处理UTF32,可以参考,它基本上使用
int cp = Char.ConvertToUtf32(a, n);
将循环增加2(因为它在两个字符上编码)后,使用条件
你的翻译就会变成
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));
string a=“ABC\U0001F01C”;
Console.WriteLine(s.Count(x=>!char.ishighsrogate(x));
对于(变量i=0;i
请注意计数从
s.Length()
到一点LINQ的变化,因为代理项被计为两个字符。我们只需计算不高于代理项的字符数,即可获得实际字符的清晰计数。以下代码获取字符串一部分的代码点
var s = "\uD834\uDD61";
for (var i = 0; i < s.Length; i += char.IsSurrogatePair(s, i) ? 2 : 1)
{
var codepoint = char.ConvertToUtf32(s, i);
Console.WriteLine("U+{0:X4}", codepoint);
}
var s=“\uD834\uDD61”;
对于(变量i=0;i
@SotiriosDelimanolis,因为如果您不这样做,您直接打印的是字符,而不是unicode数字?因此,出于打印目的。如果基础值是一个char
,这与返回代理项(int
)的Java如何等效值大于一个字符所能容纳的值?@SotiriosDelimanolis Yeah刚刚验证了这一点,确实可以在没有强制转换的情况下进行赋值,并且ReSharper会将其标记为冗余语句。谢谢你的回答。我开始更喜欢C了。毫无疑问,如果你打算在Windows上运行,这是最好的。你能解决我的问题吗之前的评论?我仍然不相信这等同于codePointAt
。
var s = "\uD834\uDD61";
for (var i = 0; i < s.Length; i += char.IsSurrogatePair(s, i) ? 2 : 1)
{
var codepoint = char.ConvertToUtf32(s, i);
Console.WriteLine("U+{0:X4}", codepoint);
}