首页 > 解决方案 > 如何在solidity中发出utf8消息

问题描述

如何在下面的代码中发出 utf8 消息(如中文)?

   pragma solidity ^0.7.2;
   modifier buyerOnly() {
    require(
        msg.sender == buyer,
        "For buyer ONLY"  //<<==utf8?
    );

它会抛出中文错误。

标签: utf-8solidity

解决方案


我想您是在问如何将 unicode 字符插入字符串。

免责声明:我不懂中文,但我使用谷歌翻译将“For Buyer only”转换为简体中文:仅适用于需求。然后我使用在线工具将这个字符串转换为下面的 \U 和 \x 转义序列。

每个用于文字字符串编码的solidity docs:

\xNN 采用十六进制值并插入适当的字节,而 \uNNNN 采用 Unicode 代码点并插入 UTF-8 序列。

所以不要尝试这个:

modifier buyerOnly() {
 require(
     msg.sender == buyer,
     "For buyer ONLY"  //<<==utf8?
 );

这(UTF-16 转义将被转换回 UTF-8)

modifier buyerOnly() {
 require(
     msg.sender == buyer,
     "\u4ec5\u9002\u7528\u4e8e\u4e70\u65b9"
 );

或者这个(单独插入 UTF-8 字节):

modifier buyerOnly() {
 require(
     msg.sender == buyer,
     "\xe4\xbb\x85\xe9\x80\x82\xe7\x94\xa8\xe4\xba\x8e\xe4\xb9\xb0\xe6\x96\xb9"
 );

推荐阅读