3

我正在使用 v8 在本机(c++)代码中使用 JavaScript。要调用 Javascript 函数,我需要将所有参数转换为 v8 数据类型。例如:将 char* 转换为 v8 数据类型的代码

char* value;
...
v8::String::New(value);

现在,我需要将 unicode chars(wchar_t) 传递给 JavaScript。

首先,v8 是否支持 Unicode 字符?如果是,如何将 wchar_t/std::wstring 转换为 v8 数据类型?

4

4 回答 4

3

我不确定在问这个问题时是否是这种情况,但目前 V8 API 有许多支持 UTF-8、UTF-16 和 Latin-1 编码文本的函数:

https://github.com/v8/v8/blob/master/include/v8.h

创建新字符串对象的相关函数是:

  • String::NewFromUtf8 (显然是 UTF-8 编码)
  • String::NewFromOneByte(Latin-1 编码)
  • String::NewFromTwoByte(UTF-16 编码)

或者,您可以避免复制字符串数据并构造一个引用现有数据(您控制其生命周期)的 V8 字符串对象:

  • String::NewExternalOneByte(Latin-1 编码)
  • String::NewExternalTwoByte(UTF-16 编码)
于 2016-01-11T13:09:03.987 回答
0

不,它没有 unicode 支持,上面的解决方案很好。

于 2014-07-09T10:08:13.660 回答
0

以下代码成功了

wchar_t path[1024] = L"gokulestás";

v8::String::New((uint16_t*)path, wcslen(path))
于 2013-05-03T07:00:20.497 回答
0

Unicode 只是将字符映射到数字。您需要的是正确的编码,例如 UTF8 或 UTF-16。

V8 似乎支持 UTF-8 (v8::String::WriteUtf8) 和未进一步描述的 16 位类型 (Write)。我会试一试并在其中写入一些 UTF-16。

在 unicode 应用程序中,Windows 将 UTF-16 存储在 std::wstring 中。也许你尝试类似的东西

std::wstring yourString;
v8::String::New (yourString.c_str());
于 2013-04-30T07:25:23.203 回答