使用 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
.
我正在尝试从 Go 调用 Objective-C 函数;这工作得很好,但我的问题出现在 UTF-8 字符串上。我不知道如何在 Go 代码中创建 NSString*
,或者如何通过 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)
}
正如预期的那样,输出是:
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
.