GVKun编程网logo

Mac node-sass 安装失败 “v8::String::Utf8Value”(node-sass安装报错)

23

在本文中,我们将给您介绍关于Macnode-sass安装失败“v8::String::Utf8Value”的详细内容,并且为您解答node-sass安装报错的相关问题,此外,我们还将为您提供关于c–*

在本文中,我们将给您介绍关于Mac node-sass 安装失败 “v8::String::Utf8Value”的详细内容,并且为您解答node-sass安装报错的相关问题,此外,我们还将为您提供关于c – * v8 :: String :: Utf8Value(args [0] – > ToString())不返回node.js的字符串addon参数、c# – Convert.ToBase64String / Convert.FromBase64String和Encoding.UTF8.GetBytes / Encoding.UTF8.GetString之间的区别、c# – Encoding.UTF8.GetString和Encoding.UTF8.GetBytes彼此不相反的原因是什么?、delphi – 在函数中引发异常时,TStrings返回为“Inaccessible value”的知识。

本文目录一览:

Mac node-sass 安装失败 “v8::String::Utf8Value”(node-sass安装报错)

Mac node-sass 安装失败 “v8::String::Utf8Value”(node-sass安装报错)

基本报错

../src/create_string.cpp:17:25: error: no matching constructor for initialization of ''v8::String::Utf8Value''
  v8::String::Utf8Value string(value);
                        ^      ~~~~~
/Users/hongsen.ren/.node-gyp/12.1.0/include/node/v8.h:3002:5: note: candidate constructor not viable: no known
      conversion from ''v8::Local<v8::Value>'' to ''const v8::String::Utf8Value'' for 1st argument
    Utf8Value(const Utf8Value&) = delete;
    ^
/Users/hongsen.ren/.node-gyp/12.1.0/include/node/v8.h:2995:5: note: candidate constructor not viable: requires
      2 arguments, but 1 was provided
    Utf8Value(Isolate* isolate, Local<v8::Value> obj);
    ^
1 error generated.
make: *** [Release/obj.target/binding/src/create_string.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/Users/hongsen.ren/code/bk_cmdb/bk-cmdb/src/ui/node_modules/node-gyp/lib/build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (events.js:196:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:256:12)
gyp ERR! System Darwin 18.6.0
gyp ERR! command "/usr/local/Cellar/node/12.1.0/bin/node" "/Users/hongsen.ren/code/bk_cmdb/bk-cmdb/src/ui/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd /Users/hongsen.ren/code/bk_cmdb/bk-cmdb/src/ui/node_modules/node-sass
gyp ERR! node -v v12.1.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
Build failed with error code: 1

其实很简单,根据 node 和 npm 的版本指定要安装的 node-sass 版本

System Darwin 18.6.0
node -v v12.1.0
node-gyp -v v3.8.0
npm -v 6.9.0

最终安装成功

npm install node-sass@4.12.0

c – * v8 :: String :: Utf8Value(args [0] – > ToString())不返回node.js的字符串addon参数

c – * v8 :: String :: Utf8Value(args [0] – > ToString())不返回node.js的字符串addon参数

我发现* v8 :: String :: Utf8Value(args [0] – > ToString())在节点0.8.2 32位上返回正确的字符串,并且在节点0.8.8上没有返回正确的字符串64位.

有谁知道为什么?

我的node.js插件看起来像这样:

#define BUILDING_NODE_EXTENSION#include <node.h>#define MAX_OUTPUT_BUF  80extern "C" char *do_sqlsig(char *in);using namespace v8;Handle<Value> sqlsig(const Arguments& args) { HandleScope scope; char *c_arg,*ret; if (args.Length() < 1) {   ThrowException(Exception::TypeError(String::New("Wrong number of arguments")));   return scope.Close(Undefined()); } c_arg = *v8::String::Utf8Value(args[0]->ToString()); ret = c_arg; //do_sqlsig(c_arg); return scope.Close(String::New(ret));}void Init(Handle<Object> exports) {  exports->Set(String::NewSymbol("sqlsig"),FunctionTemplate::New(sqlsig)->GetFunction());}NODE_MODULE(sqlsig,Init)

正如您所看到的,我正在为C函数do_sqlsig编写一个包装器.我非常了解C并且对C知之甚少

解决方法

指针从* v8 :: String :: Utf8Value(args [0] – > ToString())返回的字符串;是在该行的末尾销毁点(当Utf8Value被销毁时).您在一行中创建并销毁Utf8Value对象.取消引用悬空指针时,它是未定义的行为,以及为什么在不同版本上看到不同的结果.

将其分解为两行,只要您的Utf8Value对象在范围内,该字符串就会有效.

v8::String::Utf8Value str(args[0]->ToString());c_arg = *str;

c# – Convert.ToBase64String / Convert.FromBase64String和Encoding.UTF8.GetBytes / Encoding.UTF8.GetString之间的区别

c# – Convert.ToBase64String / Convert.FromBase64String和Encoding.UTF8.GetBytes / Encoding.UTF8.GetString之间的区别

我目前正在学习.NET中的对称加密技术.我写了一个演示如下:
private byte[] key = Encoding.ASCII.GetBytes("abcdefgh");
    private byte[] IV = Encoding.ASCII.GetBytes("hgfedcba");
    private byte[] encrypted;

    public Form1()
    {
        InitializeComponent();

    }

    private void btnEncrypt_Click(object sender,EventArgs e)
    {
        this.textBox2.Text = this.Encrypt(this.textBox1.Text);
    }

    private void btnDecrypt_Click(object sender,EventArgs e)
    {
        this.textBox3.Text = this.Decrypt(this.textBox2.Text);
    }

    private string Encrypt(string plainText)
    {
        try
        {
            using (DESCryptoServiceProvider crypto = new DESCryptoServiceProvider())
            {
                crypto.Key = this.key;
                crypto.IV = this.IV;

                ICryptoTransform transform = crypto.CreateEncryptor(crypto.Key,crypto.IV);

                using (MemoryStream stream = new MemoryStream())
                {
                    using (CryptoStream cryptoStream = new CryptoStream(stream,transform,CryptoStreamMode.Write))
                    {
                        using (StreamWriter writer = new StreamWriter(cryptoStream))
                        {
                            writer.Write(plainText);
                        }

                        encrypted = stream.ToArray();
                    }
                }
            }

            return Convert.ToBase64String(encrypted);
        }
        catch (Exception)
        {

            throw;
        }
    }

    private string Decrypt(string cipherText)
    {
        try
        {
            string plainText = string.Empty;

            using (DESCryptoServiceProvider crypto = new DESCryptoServiceProvider())
            {
                crypto.Key = this.key;
                crypto.IV = this.IV;

                ICryptoTransform transform = crypto.CreateDecryptor(crypto.Key,crypto.IV);

                using (MemoryStream stream = new MemoryStream(Convert.FromBase64String(cipherText)))
                {
                    using (CryptoStream cryptoStream = new CryptoStream(stream,CryptoStreamMode.Read))
                    {
                        using (StreamReader reader = new StreamReader(cryptoStream))
                        {
                            plainText = reader.ReadToEnd();
                        }
                    }
                }
            }

            return plainText;
        }
        catch (Exception)
        {

            throw;
        }
    }

一切都按预期工作.但如果我更换

return Convert.ToBase64String(encrypted);

using (MemoryStream stream = new MemoryStream(Convert.FromBase64String(cipherText)))

return Encoding.UTF8.GetString(encrypted);

using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(cipherText)))

我在CryptoStream System.NotSupportedException中有错误.在诊断代码之后,我发现Encoding.UTF8.GetBytes(cipherText)具有比加密更多的字节

那么使用Convert.From / ToBase64String和Encoding.UTF8.GetBytes / GetString有什么区别呢?

解决方法

UTF-8是一个字符编码.它将Unicode码点(字符)编码成字节.

Base64是二进制到文本编码.它将字节编码为文本.

在这种情况下你需要后者.

Encoding.UTF8.GetString解码一个UTF-8编码的字节数组,如果存在无效的字节序列(这很有可能是像密文一样给它随机字节),那么它是有损的.

c# – Encoding.UTF8.GetString和Encoding.UTF8.GetBytes彼此不相反的原因是什么?

c# – Encoding.UTF8.GetString和Encoding.UTF8.GetBytes彼此不相反的原因是什么?

可能我错过了一些东西,但我不明白为什么Encoding.UTF8.GetString和Encoding.UTF8.GetBytes不能互相转换?

在以下示例中,myOriginalBytes和asBytes不相等,即使它们的长度不同.谁能解释我错过了什么?

byte[] myOriginalBytes = GetRandomByteArray();
var asstring = Encoding.UTF8.GetString(myOriginalBytes);
var asBytes = Encoding.UTF8.GetBytes(asstring);

解决方法

如果你从一个有效的UTF-8字节序列开始,它们就会反转,但如果你只是从一个任意字节序列开始它们就不会.

让我们来看一个具体而简单的例子:单个字节0xff.这不是任何文本的有效UTF-8编码.所以如果你有:

byte[] bytes = { 0xff };
string text = Encoding.UTF8.GetString(bytes);

…你最终将文本作为单个字符,U+FFFD,“Unicode替换字符”,用于表示解码二进制数据时出错.对于任何无效序列,您最终会得到替换字符 – 例如,如果以0x80开头,则会获得相同的文本.显然,如果多个二进制输入被解码为相同的文本输出,则它不可能是完全可逆的变换.

如果您有任意二进制数据,则不应使用Encoding从中获取文本 – 您应该使用Convert.ToBase64String或者hex.编码用于自然文本的数据.

如果你走向相反的方向,像这样:

string text = GetRandomText();
byte[] bytes = Encoding.UTF8.GetBytes(text);
string text2 = Encoding.UTF8.GetString(bytes);

…我希望text2等于文本,除了你有无效文本的奇怪情况,例如与“一半”代理对.

delphi – 在函数中引发异常时,TStrings返回为“Inaccessible value”

delphi – 在函数中引发异常时,TStrings返回为“Inaccessible value”

有人可以帮助我解释为什么在底层函数中引发异常时,TStrings被返回为“无法访问的值”吗?

function GetStrings():TStrings;
begin
  result := TStringList.Create;
  try
    raise exception.Create('Error Message');
  except
    FreeAndNil(result);
    raise
  end;
end;

procedure TFormMain.Button1Click(Sender: TObject);
var
  S : TStrings;
begin
  try
    S := GetStrings;
    try
      //Do awesome stuff
    finally
      FreeAndNil(S)
    end;
  except
    //Debug watch: S = "Inaccessible value"
    Assert(S = nil,'Assertion failure,S should be nil'); 
  end;
end;

如果我不调用FreeAndNil(result),函数GetStrings也会返回“Inaccessible value”;在重新启动例外之前.但是,我手上也有内存泄漏:-O

解决方法

try
  S := GetStrings; 
  try
    //Do awesome stuff
  finally
    FreeAndNil(S)
  end;
except
  //Debug watch: S = "Inaccessible value"
  Assert(S = nil,S should be nil'); 
end;

这是执行的顺序:

>由于S是局部变量,因此在初始化之前,其值是不确定的.这是该代码开始执行时的状态.
>调用GetStrings函数.
> GetStrings中引发异常.这意味着GetStrings不会将执行返回给调用者,因此具有从未分配S的结果.
> finally块不会执行,因为它的尝试从未到达.
>接下来,执行except块,并且S具有不确定的值,这是您观察到的.

实际上,编译器应警告(W1036)在except块中引用S时可能尚未初始化S.但它似乎无法做到这一点,这是相当可悲的.

如果您希望能够在您的except块中引用S,则需要将其嵌入try / finally中.

S := GetStrings; 
try
  try
    //Do awesome stuff
  except
    //Do stuff with S
    Assert(S <> nil);
  end;
finally
  FreeAndNil(S)
end;

另一种思考方式是S仅在分配给S的代码和销毁该对象的代码之间有意义.结果是try / except必须嵌套在try / finally中,如果except块将能够引用该对象.

今天关于Mac node-sass 安装失败 “v8::String::Utf8Value”node-sass安装报错的介绍到此结束,谢谢您的阅读,有关c – * v8 :: String :: Utf8Value(args [0] – > ToString())不返回node.js的字符串addon参数、c# – Convert.ToBase64String / Convert.FromBase64String和Encoding.UTF8.GetBytes / Encoding.UTF8.GetString之间的区别、c# – Encoding.UTF8.GetString和Encoding.UTF8.GetBytes彼此不相反的原因是什么?、delphi – 在函数中引发异常时,TStrings返回为“Inaccessible value”等更多相关知识的信息可以在本站进行查询。

本文标签: