簡體   English   中英

如何在純C中將precomposedStringWithCanonicalMapping與CFStringref一起使用

[英]How do I use precomposedStringWithCanonicalMapping with CFStringref in plain C

我需要在Mac Os X中解析“最近的文件”的默認數據庫。這是通過sed完成的。 需要注意的是文件名存儲在分解后的utf-16里面。

因此,我想(在指向NSString函數之后)“為什么我不只是制作一個可以解決這個問題的小工具”。

該工具應該工作基本上像貓,它得到線從輸入,將其轉換的每一行成CFStringref目的,CFStringref 希望被轉變成預組合UTF-16之前,我轉換回UTF-8,並打印出來。

我討厭這么說,但是我不知道這種“免費橋接”的工作,我無意為此使用Cocoa和Objective C,我只想使用CFStringref的直接解決方案,也就是說,如果這樣的解決方案存在!

謝謝!

這是到目前為止我得到的:

#define BUFFERSIZE 512                
static void 
precomposedOutput( char *fn )
{
  char buffer[BUFFERSIZE] ;
  CFStringRef str ;
    char *outbuf;
    char *bytes ;
  FILE *fd = stdin ;
  if (fn) {
      fd = fopen(fn,"r");
   }
  while ( fgets(buffer, sizeof(buffer),fd ) ) {
      bytes = savestr(buffer) ;
      str = CFStringCreateWithCStringNoCopy(NULL, bytes,kCFStringEncodingUTF8, NULL);
      /* CONVERSION INTO PRECOMPOSED IS SUPPOSED TO HAPPEN HERE */
      outbuf = Copy_CFStringRefToCString(str) ;
      CFRelease(str) ; 
     fputs(outbuf,stdout) ;
     free(outbuf) ;         
  }
}

到目前為止,在來回轉換中,這似乎是可行的(不產生泄漏 )。我需要幫助的是將CFString轉換為預先組合的UTF-16。

謝謝!

也許我錯了,但是通過閱讀“免費橋接”文檔,我發現CFString中並非所有NSString方法都可用。

所以我搬到了Cocoa / Objective-C,這就是我最終的目的。

static void 
precomposedOutput( char *fn )
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    char buffer[BUFFERSIZE] ;
    char *outbuf;
    FILE *fd = stdin ;
    if (fn) {
        fd = fopen(fn,"r");
    }
    while ( fgets(buffer, sizeof(buffer),fd ) ) {
        NSString *str = [[NSString alloc] initWithUTF8String:buffer];
        NSString *str_precomp = [[NSString alloc ] initWithString:[str precomposedStringWithCanonicalMapping]] ;
        outbuf = (char *)[str_precomp UTF8String] ;
        [str release ] ; 
        [str_precomp release ] ;
        fputs(outbuf,stdout) ;
    }
    [pool drain];
}

很好,它可以工作,但是我的根本問題是,由於字符串已通過管道,所以分解后的字符存儲在多個字節中,而它們前面的字符字符串如“ \\\\ U”。 同時,用Applescript編寫例程,這比使用“工具”完成這項工作要簡單得多。 http://macscripter.net/viewtopic.php?pid=161135#p161135

案件結案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM