ソフトウェア概論(MacOSX Carbon 用ライブラリ)
ヘッダーファイルが無いので直ぐには使えませんが、以下のものを使ってます。
#include <Carbon/Carbon.h> /* Text Encoding Converter */
#include <sys/stat.h> /* chmod() */
#define FOPEN fopen
#define FOPEN_READ "rb"
#define FOPEN_APPEND "a+b"
int ConvertSJIStoUTF8( ConstTextPtr strSJIS, TextPtr strUTF8, int oLen )
{
TECObjectRef ec;
ByteCount ail, aol = 0;
TextEncoding hfsplusEncoding = CreateTextEncoding(kTextEncodingUnicodeV2_0, kUnicodeCanonicalDecompVariant, kUnicodeUTF8Format/*kUnicode16BitFormat*/);
TextEncoding hfsEncoding = CreateTextEncoding(kTextEncodingMacJapanese, kMacJapaneseStandardVariant, kTextEncodingDefaultFormat);
OSStatus status = TECCreateConverter(&ec, hfsEncoding, hfsplusEncoding);
status = TECConvertText(ec, (ConstTextPtr)strSJIS, strlen(strSJIS), &ail, (TextPtr)strUTF8, oLen, &aol);
strUTF8[aol] = 0;
status = TECDisposeConverter(ec);
return aol;
}
int ConvertUTF8toSJIS( ConstTextPtr strUTF8, TextPtr strSJIS, int oLen )
{
TECObjectRef ec;
ByteCount ail, aol = 0;
TextEncoding hfsplusEncoding = CreateTextEncoding(kTextEncodingUnicodeV2_0, kUnicodeCanonicalDecompVariant, kUnicodeUTF8Format/*kUnicode16BitFormat*/);
TextEncoding hfsEncoding = CreateTextEncoding(kTextEncodingMacJapanese, kMacJapaneseStandardVariant, kTextEncodingDefaultFormat);
OSStatus status = TECCreateConverter(&ec, hfsplusEncoding, hfsEncoding);
status = TECConvertText(ec, (ConstTextPtr)strUTF8, strlen(strUTF8), &ail, (TextPtr)strSJIS, oLen, &aol);
strSJIS[aol] = 0;
status = TECDisposeConverter(ec);
return aol;
}
char *yGetFileNameToOpen(char *fn)
{
static UInt8 data[MAX_PATH];
ConvertSJIStoUTF8( (ConstTextPtr)fn, (TextPtr)&data[0], sizeof(data)/sizeof(UInt8) );
return data;
}
yocread
void yocread(char *fn, ULONG sp, char *str, int len)
{
FILE *fh;
fh = FOPEN(yGetFileNameToOpen(fn),FOPEN_READ);
if( fh != NULL ) {
if( sp > 0 )
fseek(fh,sp,SEEK_SET);
fread(str,sizeof(char),len,fh);
fclose(fh);
}
}
yfsize
ULONG yfsize( LPSTR filename )
{
ULONG ret = 0;
FILE *fh;
fh = FOPEN(yGetFileNameToOpen(filename),FOPEN_READ);
if( fh != NULL ) {
ret = fseek(fh,0,SEEK_END);
ret = ftell(fh);
fclose(fh);
}
return ret;
}
yocwrite
void yocwrite(char *fn, ULONG sp, char *str, int len)
{
FILE *fh;
int ret;
if( len <= 0 )
len = strlen(str);
fh = FOPEN(yGetFileNameToOpen(fn),FOPEN_APPEND); /* append binary */
if( fh != NULL ) {
fseek(fh,sp,SEEK_SET);
fwrite(str,sizeof(char),len,fh);
fclose(fh);
}
}
YAllocMem
LPSTR YAllocMem( ULONG size )
{
return (LPSTR)malloc(size);
}
YFreeMem
void YFreeMem( LPSTR ptr )
{
if( ptr ) {
free(ptr);
}
}

Copyright(C) 2008 Y.Yonemura All rights reserved.