我有一个函数,它以bytes32 _name
作为参数,并将其存储在结构中。
假设_name
是中文、韩文或日文,我从app.js
将_name
转换为十六进制,将其传递给函数。
App.contracts.Test.deployed().then(function(instance) {
return instance.storeName(web3.toHex(name), { from: account });
现在,当我通过调用函数来检索name
并使用web3.toAscii
转换它时
App.contracts.Test.deployed().then(function(instance) {
return instance.getStruct.call();
}).then(function(result) {
var name = web3.toAscii(result[1]);
该值将类似于ÁÁ8È
。是web3.toAscii
无法处理其他语言,还是应该只使用string _name
?
发布于 2018-06-18 20:05:40
这里的危险标志当然是您正在使用web3.toAscii
转换中文、韩文等。默认情况下,Ascii仅限于英语。
Solidity支持utf-8,是的,您可以获取和读取以utf-8编码(允许非英语字符)的名称。解决方案是将代码编码到utf-8中,然后rest全部由web3
覆盖。
var chinese_string = '你好'; //hello var chinese_string_utf_encoded = '\xE4\xBD\xA0\xE5\xA5\xBD'; //checkout utf-8js
web3.toHex(a_utf_encoded); //returns "0xe4bda0e5a5bd"
现在使用web3.toUtf8
将其解码回原来的中文文本。
web3.toUtf8("0xe4bda0e5a5bd"); //returns "你好"
https://ethereum.stackexchange.com/questions/51509
复制相似问题