2

我正在编写一个文本编辑器,它可以选择显示一个项目符号来代替任何不可见的 Unicode 字符。不幸的是,似乎没有简单的方法来确定 Unicode 字符是否不可见。

我需要找到一个包含每个 Unicode 字符的文本文件,以便我可以查看不可见的字符。有人知道我在哪里可以找到这样的文件吗?

编辑:我正在 Cocoa 中为 Mac OS X 编写这个应用程序。

4

7 回答 7

3

哦,我明白了......实际的隐形字符;)这个常见问题解答可能会有用:

http://www.unicode.org/faq/unsup_char.html

它列出了当前不可见的代码点,并包含您可能会发现有用的其他信息。

编辑:添加了一些 Cocoa 特定的信息

由于您使用的是 Cocoa,因此您可以获得控制字符的 unicode 字符集并与之进行比较:

NSCharacterSet* controlChars = [NSCharacterSet controlCharacterSet];

您可能还想查看我在上面发布的 FAQ 链接,并根据那里的信息将您认为可能需要的任何字符添加到 controlCharacterSet 返回的字符集中。

编辑:添加了一个从 Unicode 字符创建 Unicode 字符串的示例

unichar theChar = 0x000D;
NSString* thestring = [NSStirng stringWithCharacters:&theChar length:1];
于 2008-11-20T06:42:57.590 回答
1

让我知道这段代码是否有帮助:

-(NSString*)stringByReplacingControlCharacters:(NSString*)originalString
{
    NSUInteger length = [originalString length];
    unichar *strAsUnichar = (unichar*)malloc(length*sizeof(unichar));
    NSCharacterSet* controlChars = [NSCharacterSet controlCharacterSet];
    unichar bullet = 0x2022;

    [originalString getCharacters:strAsUnichar];
    for( NSUInteger i = 0; i < length; i++ ) {
        if( [controlChars characterIsMember:strAsUnichar[i]] )
            strAsUnichar[i] = bullet;
    }

    NSString* newString = [NSString stringWithCharacters:strAsUnichar length:length];
    free(strAsUnichar);

    return newString;
}

重要警告:

这可能不是执行此操作的最有效方式,因此您必须在开始工作后决定如何优化。这仅适用于 BMP 上的字符,如果您有这样的要求,则必须添加对堆肥字符的支持。这根本没有错误检查。

于 2008-11-20T09:10:20.177 回答
0

一个很好的起点是Unicode Consortium本身,它提供了大量数据,其中一些是您正在寻找的。

我也在生成一个 DLL,你给它一个字符串,它会返回每个字符的 UCN。但不要屏住呼吸。

于 2008-11-20T06:35:37.727 回答
0

当前的官方 Unicode 版本是 5.1.0,描述其中所有代码点的文本文件可以在http://www.unicode.org/standard/versions/components-latest.html找到

于 2008-11-20T06:36:21.563 回答
0

对于 Java,java.lang.Character.getType。对于 C,u_charType()u_isgraph()

于 2008-11-20T06:57:22.303 回答
0

您可能会发现此代码很有趣: http: //gavingrover.blogspot.com/2008/11/unicode-for-grerlvy.html

于 2008-11-20T08:13:32.913 回答
-1

这是一项不可能完成的任务,Unicode 甚至支持克林贡语,所以它不会工作。然而,大多数文本编辑器使用标准的 ANSI 不可见字符。如果您的 Unicode 库很好,它将支持查找等效字符和/或类别,您可以使用这两个功能以及任何编辑器来完成它

编辑:是的,我对克林贡语的支持很傻,但这并不意味着它不是真的......当然,联盟不支持克林贡语,但是在 Unicode 的“私人使用区”中定义了克林贡语的运动克林贡字母 (U+F8D0 - U+F8FF)。有兴趣的可以在这里链接:)

注意:想知道克林贡程序员使用什么编辑器...

于 2008-11-20T06:33:17.407 回答