簡體   English   中英

為什么0xFEFF出現在recv數據中

[英]Why 0xFEFF appear in recv data

我嘗試創建一個用 c++ 編寫的客戶端和一個使用 python flask 的服務器。 任務很簡單,客戶端連接並從服務器獲取數據,然后在控制台上顯示。 我有兩段代碼:

服務器:

from flask import Flask

app = Flask(__name__)

@app.route('/hello')
def hello():
    return "hello".encode("utf-16")


if __name__ == "__main__":
    app.run(debug=True,host="127.0.0.1")

客戶:

BOOL bResults = FALSE;
    bool ret = false;
    DWORD dwDownloaded = 0;
    WCHAR wDataRecv[1024] = {0};
    HINTERNET hConnect = NULL;
    HINTERNET hRequest = NULL;
    DWORD dwSize = 0;

    HINTERNET hSession = WinHttpOpen(L"WinHTTP Example/1.0",
        WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
        WINHTTP_NO_PROXY_NAME,
        WINHTTP_NO_PROXY_BYPASS, 0); # open session to connect
    hConnect = WinHttpConnect(hSession, L"localhost", (port == 0) ? INTERNET_DEFAULT_HTTP_PORT : port, 0); # connect to localhost with port 80 or custom port (this time i use port 5000)
    if (!hConnect)
        goto Free_And_Exit;
    hRequest = WinHttpOpenRequest(hConnect, L"GET", L"/hello", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0); 
    
    if (hRequest) {
        bResults = WinHttpSendRequest(hRequest, NULL, 0,WINHTTP_NO_REQUEST_DATA, 0,0, 0);# send GET request
    }

    if (bResults)
        bResults = WinHttpReceiveResponse(hRequest, NULL);

    if (bResults)
    {
        dwSize = 0;
        if (!WinHttpQueryDataAvailable(hRequest, &dwSize)) {
            std::cout << "WinHttpQueryDataAvailable failed with code: " << GetLastError();
        }
        if (!WinHttpReadData(hRequest, wDataRecv, dwSize, &dwDownloaded)) {
            std::cout << "WinHttpReadData failed with code: " << GetLastError();
        }
        std::wcout << wDataRecv; # wcout wont print anything to console
    }
Free_And_Exit: #clean up
    if (hRequest) WinHttpCloseHandle(hRequest);
    if (hConnect) WinHttpCloseHandle(hConnect);
    return ret;

我注意到從服務器返回的數據如下:

b'\xfe\xff\你好'

為什么有 0xFEFF?

它是BOM(字節順序標記)。 我只需要從客戶端解碼或使用:

return "hello".encode('UTF-16LE') # not UTF-16

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM