这可能是由于编码不匹配引起的。在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之间进行编码转换。在实际应用中,您可能需要考虑更多的细节,例如字符串长度、内存分配等

nodejs C++中文字符串传回js乱码

原文地址: https://www.cveoy.top/t/topic/g9ru 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录