【问题标题】:How to convert string to utf8 encoding?如何将字符串转换为 utf8 编码?
【发布时间】:2015-01-09 12:13:19
【问题描述】:

我正在像这样阅读我的应用目录

NSArray *pathss = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectorys = [pathss objectAtIndex:0];
NSError * error;
NSMutableArray * directoryContents =  [[NSFileManager defaultManager]
                            contentsOfDirectoryAtPath:documentsDirectorys error:&error];

我得到的输出:

"Forms_formatted.pdf",
"fund con u\U0308u\U0308.pdf",
"hackermonthly-issue.pdf",

这些是文件名。我的问题,我怎么能把这个名字“fund con u\U0308u\U0308.pdf”转换成正确的格式。提前致谢

【问题讨论】:

  • 这里没问题。这只是 NSArray 用来打印非 ASCII 字符的(奇怪的)方式。如果您访问单个元素,例如directoryContents[1] 那么一切都会好起来的。比较stackoverflow.com/questions/16774544/…
  • 其实这个词是“fund con ü.pdf”。我希望它打印相同而不是这个“fund con u\U0308u\U0308.pdf”。
  • NSLog(@"file=%@", directoryContents[1]); 得到什么输出?

标签: ios objective-c utf8-decode


【解决方案1】:

也许这会有所帮助:

NSString *documentsDirectorys = [pathss objectAtIndex:0];
const char *documentsDirectoryCstring = [documentsDirectorys cStringUsingEncoding:NSASCIIStringEncoding];

编辑:

const char *documentsDirectoryCstring = [documentsDirectorys cStringUsingEncoding:NSUTF8StringEncoding];

【讨论】:

  • u\U0308 字符不是ASCII,是组合字符,不能用ASCII表示。它是一个 UTF-16 组合字符。
【解决方案2】:

将 NSString 转换为 UTF-16 编码的 NSData,再转换回 UTF-8 编码的 NSString。 它可能是没有 BOM 的 UTF-16 大端。字符不是 ASCII。

字符u\U0308不是ASCII,它是一个组合变音符号̈ü,这个字符也被称为上面的双点、变音符号、希腊语dialytika和双导数。 \U0308 将变音符号置于 u 字符之上。

【讨论】:

    【解决方案3】:

    你可以试试这个。 NSLog 使用 NSArray 的描述方法来打印 NSArray 对象,它处理 unicode 字符与其包含的对象(例如 NSString 对象)的描述不同。或者你可以循环遍历数组和NSLog每个项目。

    NSLog(@"%@", [NSString stringWithCString:[[array description] cStringUsingEncoding:NSASCIIStringEncoding] encoding:NSNonLossyASCIIStringEncoding]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 2012-07-17
      • 1970-01-01
      相关资源
      最近更新 更多