nodejs C++中文字符串传回js乱码
这可能是由于编码不匹配引起的。在C++中,中文字符串通常使用UTF-8编码,而在JavaScript中,通常使用Unicode编码。因此,当将中文字符串从C++传递到JavaScript时,需要进行编码转换。
您可以使用iconv库来进行编码转换。以下是一个示例代码:
#include <node.h>
#include <v8.h>
#include <iconv.h>
using namespace v8;
void Method(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
// 获取传入的中文字符串
String::Utf8Value utf8_value(isolate, args[0]);
const char* input = *utf8_value;
// 定义转换后的中文字符串
char output[1024];
memset(output, 0, sizeof(output));
// 定义iconv_t对象
iconv_t cd = iconv_open("UTF-8", "GBK");
// 进行编码转换
size_t in_len = strlen(input);
size_t out_len = sizeof(output);
char* in_ptr = const_cast<char*>(input);
char* out_ptr = output;
iconv(cd, &in_ptr, &in_len, &out_ptr, &out_len);
// 关闭iconv_t对象
iconv_close(cd);
// 返回转换后的中文字符串
Local<String> result = String::NewFromUtf8(isolate, output, NewStringType::kInternalized).ToLocalChecked();
args.GetReturnValue().Set(result);
}
void Initialize(Local<Object> exports) {
NODE_SET_METHOD(exports, "method", Method);
}
NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
在JavaScript中,您可以使用以下代码调用该函数:
const addon = require('./build/Release/addon');
const result = addon.method('中文字符串');
console.log(result); // 输出:中文字符串
请注意,上述示例仅演示了如何在C++和JavaScript之间进行编码转换。在实际应用中,您可能需要考虑更多的细节,例如字符串长度、内存分配等
原文地址: https://www.cveoy.top/t/topic/g9ru 著作权归作者所有。请勿转载和采集!