9
2014/2/23 Cocoa #23 file:///Users/msyk/Desktop/cocoastudy/Cocoa-Study/CocoaStudy_IDConv/CocoaStudy_IDConv.html 1/9

Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ

Embed Size (px)

DESCRIPTION

Cocoa勉強会23 2007/10/22 識別情報の変換〜文字エンコードとデータタイプ

Citation preview

Page 1: Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ

2014/2/23 Cocoa #23

file:///Users/msyk/Desktop/cocoastudy/Cocoa-Study/CocoaStudy_IDConv/CocoaStudy_IDConv.html 1/9

Page 2: Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ

2014/2/23 Cocoa #23

file:///Users/msyk/Desktop/cocoastudy/Cocoa-Study/CocoaStudy_IDConv/CocoaStudy_IDConv.html 2/9

@interface NSString ( CocoaStudy23 )-(id) initWithData:(NSData *)data IANACharSetName:(NSString *)charSetName;@end

@implementation NSString ( CocoaStudy23 )-(id) initWithData:(NSData *)data IANACharSetName:(NSString *)charSetName{ CFStringEncoding cfCharset = CFStringConvertIANACharSetNameToEncoding((CFStringRef)charSetName); NSStringEncoding nsCharset = CFStringConvertEncodingToNSStringEncoding(cfCharset); return [self initWithData:data encoding:nsCharset];}@end

@implementation AppController

-(void) awakeFromNib{

Page 3: Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ

2014/2/23 Cocoa #23

file:///Users/msyk/Desktop/cocoastudy/Cocoa-Study/CocoaStudy_IDConv/CocoaStudy_IDConv.html 3/9

UInt8 cString[] = { 0x82, 0xA9, 0x82, 0xC8, 0x8A, 0xBF, 0x95, 0x5C, 0 };

NSData *streamedString = [NSData dataWithBytes:(void *)&cString length:sizeof cString]; NSString *testString = [[NSString alloc]initWithData:streamedString IANACharSetName:@"Shift-JIS"]; NSLog( testString );}

Page 4: Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ

2014/2/23 Cocoa #23

file:///Users/msyk/Desktop/cocoastudy/Cocoa-Study/CocoaStudy_IDConv/CocoaStudy_IDConv.html 4/9

Page 5: Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ

2014/2/23 Cocoa #23

file:///Users/msyk/Desktop/cocoastudy/Cocoa-Study/CocoaStudy_IDConv/CocoaStudy_IDConv.html 5/9

-(void) awakeFromNib{ NSString *targetFile = @"/Users/msyk/Documents/apple-reg.pdf"; NSString *prefMIMEType = [self preferedMIMETypeFromFile:targetFile]; NSLog( prefMIMEType );

targetFile = @"file.xls"; prefMIMEType = [self preferedMIMETypeFromFile:targetFile]; NSLog( prefMIMEType );}

- (NSString *)preferedMIMETypeFromFile:(NSString *)targetFile{ NSString *currentFileExtension = [targetFile pathExtension]; CFStringRef uti = UTTypeCreatePreferredIdentifierForTag( kUTTagClassFilenameExtension, (CFStringRef)currentFileExtension, NULL); CFStringRef prefferdMIMEType = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType); return (NSString *)prefferdMIMEType;}

Page 6: Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ

2014/2/23 Cocoa #23

file:///Users/msyk/Desktop/cocoastudy/Cocoa-Study/CocoaStudy_IDConv/CocoaStudy_IDConv.html 6/9

- (NSString *)preferedMIMETypeFromFile:(NSString *)targetFile{ FSRef ref; FSPathMakeRef ((unsigned char*)[targetFile fileSystemRepresentation], &ref, NULL); CFDictionaryRef values = NULL; CFStringRef attrs[] = { kLSItemContentType, kLSItemExtension, kLSItemRoleHandlerDisplayName }; CFStringRef prefferdMIMEType = NULL; CFArrayRef attrNames = CFArrayCreate(NULL, (const void **)attrs, 3 , NULL); if ( LSCopyItemAttributes(&ref, kLSRolesAll, attrNames, &values) == noErr ) { CFTypeRef uti = CFDictionaryGetValue(values, kLSItemContentType); CFStringRef extInfo = CFDictionaryGetValue(values, kLSItemExtension); CFStringRef appInfo = CFDictionaryGetValue(values, kLSItemRoleHandlerDisplayName); NSLog ( @"%@ -> %@ -> %@", uti, extInfo, appInfo ); prefferdMIMEType = UTTypeCopyPreferredTagWithClass( uti, kUTTagClassMIMEType ); } if ( prefferdMIMEType == nil ) { /* Your Own Codes */ } return (NSString *)prefferdMIMEType;}

Page 7: Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ

2014/2/23 Cocoa #23

file:///Users/msyk/Desktop/cocoastudy/Cocoa-Study/CocoaStudy_IDConv/CocoaStudy_IDConv.html 7/9

Page 8: Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ

2014/2/23 Cocoa #23

file:///Users/msyk/Desktop/cocoastudy/Cocoa-Study/CocoaStudy_IDConv/CocoaStudy_IDConv.html 8/9

struct LSItemInfoRecord {

LSItemInfoFlags flags; //調べた項目に対するフラグ情報。ビットごとに意味があるが調べるには以下の表の定義定数を使う

OSType filetype; //ファイルタイプ

OSType creator; //クリエイタ

CFStringRef extension; //ファイルの拡張子を示すCFStringへの参照(使用後のリリース必要)

CFStringRef iconFileName; //(未使用)

LSKindID kindID; //(未使用)

};

typedef struct LSItemInfoRecord LSItemInfoRecord;

Page 9: Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ

2014/2/23 Cocoa #23

file:///Users/msyk/Desktop/cocoastudy/Cocoa-Study/CocoaStudy_IDConv/CocoaStudy_IDConv.html 9/9