在本文中,我们将给您介绍关于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安装报错)
- 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安装报错)
基本报错
../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参数
有谁知道为什么?
我的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知之甚少
解决方法
将其分解为两行,只要您的Utf8Value对象在范围内,该字符串就会有效.
v8::String::Utf8Value str(args[0]->ToString());c_arg = *str;
c# – Convert.ToBase64String / Convert.FromBase64String和Encoding.UTF8.GetBytes / Encoding.UTF8.GetString之间的区别
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有什么区别呢?
解决方法
Base64是二进制到文本编码.它将字节编码为文本.
在这种情况下你需要后者.
Encoding.UTF8.GetString解码一个UTF-8编码的字节数组,如果存在无效的字节序列(这很有可能是像密文一样给它随机字节),那么它是有损的.
c# – Encoding.UTF8.GetString和Encoding.UTF8.GetBytes彼此不相反的原因是什么?
在以下示例中,myOriginalBytes和asBytes不相等,即使它们的长度不同.谁能解释我错过了什么?
byte[] myOriginalBytes = GetRandomByteArray(); var asstring = Encoding.UTF8.GetString(myOriginalBytes); var asBytes = Encoding.UTF8.GetBytes(asstring);
解决方法
让我们来看一个具体而简单的例子:单个字节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”
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”等更多相关知识的信息可以在本站进行查询。
本文标签: