V8是否支持Unicode?

时间:2013-04-30 06:50:53

标签: v8 unicode-string

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

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

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

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

4 个答案:

答案 0 :(得分: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 encoded)
  • String :: NewFromTwoByte(UTF-16编码)

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

  • String :: NewExternalOneByte(Latin-1 encoded)
  • String :: NewExternalTwoByte(UTF-16编码)

答案 1 :(得分:0)

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

V8似乎支持UTF-8(v8 :: String :: WriteUtf8)和一个没有进一步描述的16bit类型(写入)。我会尝试一下,然后写一些UTF-16。

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

的东西
std::wstring yourString;
v8::String::New (yourString.c_str());

答案 2 :(得分:0)

以下代码完成了这个技巧

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

v8::String::New((uint16_t*)path, wcslen(path))

答案 3 :(得分:0)

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