使用 UTF-8 字符串从 Go 调用 Objective-C

我正在尝试从 Go 调用一个 Objective-C 函数;这很好用,但我的问题出现在 UTF-8 字符串上。我不知道如何NSString*在 Go 代码中创建一个,或者如何通过char*.


package main


/*

#cgo CFLAGS: -x objective-c

#cgo LDFLAGS: -framework Cocoa

#import <Cocoa/Cocoa.h>


void printUTF8(const char * iconPath) {

    NSLog(@"%s", iconPath);

}

*/

import "C"


import (

    "fmt"

    "unsafe"

)


func main() {

    goString := "test 漢字 test\n"

    fmt.Print(goString)

    cString := C.CString(goString)

    defer C.free(unsafe.Pointer(cString))


    C.printUTF8(cString)

}


正如预期的那样,输出是:


测试汉字测试


测试 ʺ¢Â≠ó 测试


谁能帮我这个?


Qyouu
浏览 74回答 1
1回答

梵蒂冈之花

在您的 Objective-C 代码中,您需要:void printUTF8(const char * iconPath) {&nbsp; &nbsp; // NSLog(@"%s", iconPath);&nbsp; &nbsp; NSLog(@"%@", @(iconPath)); // "test 漢字 test"}使用装箱表达式@(iconPath)可确保创建有效的 NSString。例如,如果UTF-8传递了错误的序列(例如尝试"Fr\xe9d\xe9ric"),它将安全地渲染到null.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go