今天我们有一个奇怪的人,我认为我的NSStrings编码不正确。
NSString * convertedString = [NSString stringWithUTF8String:mesh->groupMesh[i].materialData->textureName];
-textureName只是一个c样式字符串,我将其转换为NSString。
- 字符串是:“dennum1.png”
NSArray * line = [convertedString componentsSeparatedByString:@"."];
NSString * texPath = [[NSBundle mainBundle] pathForResource:line[0] ofType:line[1]];
然后我把它分成一个NSArray行,用句号“。”分隔。
这使得line [0]为dennum1,而line [1]为png。
我甚至做了一个NSLog来确保:
NSLog(@"Name:%@ Type:%@", line[0], line[1]);
2013-09-21 02:15:27.386 SteveZissou[8846:c07] Name:dennum1 Type:png
我将其解析为pathForResource函数,我得到一个(null)响应。
但如果我在代码I.E中输入文件名:
convertedString = @"dennum1.png";
NSArray * line = [convertedString componentsSeparatedByString:@"."];
NSString * texPath = [[NSBundle mainBundle] pathForResource:line[0] ofType:line[1]];
NSLog(@"This is the texPath: %@",texPath);
IT工作?!
This is the texPath: /Users/meow/Library/Application Support/iPhone Simulator/6.0/Applications/2DEB8076-5F9D-45DE-8A73-10B1C8A084B4/SteveZissou.app/dennum1.png
我在代码中输入的NSString和来自转换的NSString是否有可能以不同的方式编码?
当我单独NSLog时,无论类型如何,我都得到相同的结果:
2013-09-21 02:15:27.386 SteveZissou[8846:c07] This is the c style string: dennum1.png
2013-09-21 02:15:27.386 SteveZissou[8846:c07] This is the converted c style string: dennum1.png
2013-09-21 02:15:27.386 SteveZissou[8846:c07] This is the string manually typed in: dennum1.png
答案 0 :(得分:0)
如果您使用旨在处理此内容的NSPathUtilities中的方法会发生什么。像:
NSString * texPath = [[NSBundle mainBundle] pathForResource:string.stringByDeletingPathExtension ofType:string.pathExtension];
此外,还有-fileSystemRepresentation
将NSString转换为const char *
并在无法正确转换字符串时抛出异常。
答案 1 :(得分:0)
我在浏览可能的代码组合并偶然发现它之后想出来了。
我使用NSURL函数根据我正在使用的字符串获取路径,这导致了这条路径:
file://localhost/Users/meow/Library/Application%20Support/iPhone%20Simulator/6.0/Applications/2DEB8076-5F9D-45DE-8A73-10B1C8A084B4/SteveZissou.app/dennum2.png%0D
看看最后!那不应该在那里!原来它被称为回车并且它被拉出文件(可能是文件格式的残余),但是对于NSLog是不可见的,但它对NSURL是不可见的(NSURL必须读取字节并显示它们是什么?) 。因此,从路径末端剪断回车给我正确的文件,一切正常。
我一直在想自己使用十六进制编辑器来查看文件,但是在mac appstore上找不到一个,我想如果这是Windows,我会在一半的时间内抓住它。