gpt4 book ai didi

javascript - 如何在我的应用程序堆栈中处理非ASCII UTF-8字符

转载 作者:行者123 更新时间:2023-12-02 10:21:09 25 4
gpt4 key购买 nike

我将国家/地区名称存储在通过cpprest服务器公开的sqlite数据库中。我的Web应用程序正在查询这些国家名称,服务器返回的结果是原始二进制字符串(八位字节流),这些字符串具有名称长度和嵌入其中的名称的实际字符。

我正在将国名读为std::string值,如下所示:

country->Label = std::string((const char*)sqlite3_column_text(Query.Statement, 1));

然后,我将它们复制到 std::vector<char>缓冲区中,然后通过cpprest API发送回去
Concurrency::streams::bytestream::open_istream<std::vector<char>>(buffer);

当我的Web应用程序接收到数据时,我将其解码为:
var data = new Uint8Array(request.response);
var dataView = new DataView(data.buffer);

var nameLength = dataView.getUint32(0, true);

var label = "";

for(var k = 0 ; k < nameLength; k++)
{
label += String.fromCharCode([dataView.getUint8(k + 4)])
}

在大多数情况下,这可以正常工作,直到遇到一个包含非ASCII字符的国家/地区名称,然后我得到了这个可憎之处:

uh oh

我对UTF-8的理解是,它通常存储ASCII字符,但跨多个字节存储非ASCII字符。

需要告知我的应用程序堆栈的哪个部分何时以及在何处将多个字节用于非ASCII字符,我将如何去做?我的猜测是,由于Web应用程序就是显示文本的应用程序,因此这是需要进行更改的地方,但是我不确定该怎么做。

编辑:
为了澄清,我尝试了提供的答案,但是它们似乎也不起作用:
var labelArray = data.subarray(4, 4 + nameLength);                  
var label = new TextDecoder("utf-8").decode(labelArray);

结果是:

uh oh2

最佳答案

var data = new Uint8Array(request.response);
var string = new TextDecoder("utf-8").decode(data);

关于javascript - 如何在我的应用程序堆栈中处理非ASCII UTF-8字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60122184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com