我正在为 Mac OS X(10.5+)编写一个 CLI 工具,它必须处理很可能包含非 ASCII 字符的命令行参数。
为了进一步处理,我使用 +[NSString stringWithCString:encoding:] 转换这些参数。
我的问题是,我找不到关于如何确定运行所述 cli-tool 的 shell 使用的字符编码的好信息。
我想出的解决方案如下:
NSDictionary *environment = [[NSProcessInfo processInfo] environment];
NSString *ianaName = [[environment objectForKey:@"LANG"] pathExtension];
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(
CFStringConvertIANACharSetNameToEncoding( (CFStringRef)ianaName ) );
NSString *someArgument = [NSString stringWithCString:argv[someIndex] encoding:encoding];
然而,我觉得这有点粗鲁——这让我觉得我错过了一些明显的东西……但是什么?
是否有一种更理智/更清洁的方式来实现基本相同?
提前致谢
D