【问题标题】:Unicode html buffers not working with libmicrohttpdUnicode html 缓冲区不适用于 libmicrohttpd
【发布时间】:2016-12-28 10:46:17
【问题描述】:

我正在尝试创建一个服务器,它将以非英语语言提供页面,并且我正在使用以下代码测试 libmicrohttpd:

static int
answer_to_connection(void* cls, struct MHD_Connection* connection,
                     const char* url, const char* method,
                     const char* version, const char* upload_data,
                     size_t* upload_data_size, void** con_cls)
{
    char *page = "<html><head><meta charset='UTF-8'></head><body>हैलो यूनिकोड</body></html>";


    struct MHD_Response* response;
    int ret;

    response =
        MHD_create_response_from_buffer(strlen(page), (void *)page,
                                        MHD_RESPMEM_PERSISTENT);

    ret = MHD_queue_response(connection, MHD_HTTP_OK, response);
    MHD_destroy_response(response);

    return ret;
}

但它不起作用和给予?????浏览器上的字符。 谁能告诉我 libmicrohttpd 是否支持 Unicode,如果支持,那么如何?

【问题讨论】:

  • 我做到了,但没有运气。
  • 看看这里:stackoverflow.com/questions/1696619/…。确保您的字符串采用 UTF-8 格式。如果您使用带有 u8 的 C11 编译器前缀字符串为:char *page = u8"&lt;html&gt;&lt;head&gt;&lt;meta charset='UTF-8'&gt;&lt;/head&gt;&lt;body&gt;हैलो यूनिकोड&lt;/body&gt;&lt;/html&gt;";
  • 是的,有效!!!!谢谢,添加这个作为答案,我会标记为正确

标签: html c http unicode server


【解决方案1】:

正如我在评论中所写的,您必须确保您的字符串采用 UTF-8 格式。标准char 类型根据所选代码页或本地格式格式化字符串,如果解释为 UTF-8,则会给出格式错误的字符。

如果您使用带有 u8 的 C11 编译器前缀字符串:

char *page = u8"<html><head><meta charset='UTF-8'></head><body>हैलो यूनिकोड</body></html>";

如果您的编译器不支持 UTF-8,您需要使用十六进制转义或八进制等格式化字符串的外部工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多