确定Unicode字符是否可见?

时间:2008-11-20 06:28:56

标签: cocoa unicode hidden-characters

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

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

编辑:我正在使用Cocoa for Mac OS X编写此应用程序。

7 个答案:

答案 0 :(得分: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];

答案 1 :(得分: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上的字符,如果您有这样的要求,则必须添加对堆肥字符的支持。这根本没有错误检查。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

您可能会发现此代码值得关注:http://gavingrover.blogspot.com/2008/11/unicode-for-grerlvy.html

答案 6 :(得分:-1)

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

编辑:是的我对克林贡恩的支持感到愚蠢,但这并不是真的......当然,克林贡并没有得到财团的支持,但是克林贡有一个运动在为克林贡字母(U + F8D0 - U + F8FF)定义的Unicode的“私人使用区”中。 Link here感兴趣的人:)

注意:想知道Klingon程序员使用的编辑器......