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

Call Objective-C from Go with UTF-8 string

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

传递 UTF-8 字符串
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)
}

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

test 漢字 test

test 漢字 test

谁能帮我解决这个问题?

在您的 objective-C 代码中,您需要:

void printUTF8(const char * iconPath) {
    // NSLog(@"%s", iconPath);
    NSLog(@"%@", @(iconPath)); // "test 漢字 test"
}

使用加框表达式 @(iconPath) 确保创建一个有效的 NSString。例如,如果传递了错误的 UTF-8 序列(例如尝试 "Fr\xe9d\xe9ric"),它将安全地呈现为 null.