6

我有一个关于 C# 中的字符串和字符的问题。我发现 C# 中的一个字符串是一个 Unicode 字符串,一个 char 需要 2 个字节。所以每个字符都是 UTF-16 编码。太好了,但我也在 Wikipedia 上读到,UTF-16 中有一些字符占用 4 个字节。

我正在做一个程序,可以让你为字母数字显示器绘制字符。在程序中还有一个测试器,你可以在里面写一些字符串,它会画出来让你看看它的样子。

那么我应该如何使用字符串,用户写入一个需要 4 个字节的字符,即 2 个字符。因为我需要逐个字符地遍历字符串,在列表中找到这个字符,并将其绘制到面板中。

4

2 回答 2

4

你可以这样做:

for( int i = 0; i < str.Length; ++i ) {
    int codePoint = Char.ConvertToUTF32( str, i );
    if( codePoint > 0xffff ) {
        i++;
    }
}

然后 将codePoint任何可能的代码点表示为 32 位整数。

于 2012-12-23T11:57:07.930 回答
1

完全使用String对象;根本不使用Char。使用示例IndexOf

var needle = "ℬ";    // U+1D49D (I think)
var hayStack = "a code point outside basic multi lingual plane: ℬ";
var index = heyStack.IndexOf(needle);

类上的大多数方法String都有接受Char或的重载String。大多数方法Char都有覆盖,也可以使用String。只是不要使用Char.

于 2012-12-23T12:05:47.647 回答