我正在编写一个文本编辑器,它可以选择显示一个项目符号来代替任何不可见的 Unicode 字符。不幸的是,似乎没有简单的方法来确定 Unicode 字符是否不可见。
我需要找到一个包含每个 Unicode 字符的文本文件,以便我可以查看不可见的字符。有人知道我在哪里可以找到这样的文件吗?
编辑:我正在 Cocoa 中为 Mac OS X 编写这个应用程序。
我正在编写一个文本编辑器,它可以选择显示一个项目符号来代替任何不可见的 Unicode 字符。不幸的是,似乎没有简单的方法来确定 Unicode 字符是否不可见。
我需要找到一个包含每个 Unicode 字符的文本文件,以便我可以查看不可见的字符。有人知道我在哪里可以找到这样的文件吗?
编辑:我正在 Cocoa 中为 Mac OS X 编写这个应用程序。
哦,我明白了......实际的隐形字符;)这个常见问题解答可能会有用:
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];
让我知道这段代码是否有帮助:
-(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 上的字符,如果您有这样的要求,则必须添加对堆肥字符的支持。这根本没有错误检查。
一个很好的起点是Unicode Consortium本身,它提供了大量数据,其中一些是您正在寻找的。
我也在生成一个 DLL,你给它一个字符串,它会返回每个字符的 UCN。但不要屏住呼吸。
当前的官方 Unicode 版本是 5.1.0,描述其中所有代码点的文本文件可以在http://www.unicode.org/standard/versions/components-latest.html找到
对于 Java,java.lang.Character.getType。对于 C,u_charType()或u_isgraph()。
您可能会发现此代码很有趣: http: //gavingrover.blogspot.com/2008/11/unicode-for-grerlvy.html
这是一项不可能完成的任务,Unicode 甚至支持克林贡语,所以它不会工作。然而,大多数文本编辑器使用标准的 ANSI 不可见字符。如果您的 Unicode 库很好,它将支持查找等效字符和/或类别,您可以使用这两个功能以及任何编辑器来完成它
编辑:是的,我对克林贡语的支持很傻,但这并不意味着它不是真的......当然,联盟不支持克林贡语,但是在 Unicode 的“私人使用区”中定义了克林贡语的运动克林贡字母 (U+F8D0 - U+F8FF)。有兴趣的可以在这里链接:)
注意:想知道克林贡程序员使用什么编辑器...