Sample code for 30+ languages & platforms
Zig

Send HTTP POST using non-UTF8 such as Windows-1250

See more HTTP Examples

Demonstrates how to specify the character encoding (charset) to be used for the body of an HTTP POST.

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    const http = try chilkat.Http.init();
    defer http.deinit();

    const req = try chilkat.HttpRequest.init();
    defer req.deinit();

    // Load a JSON file containing strings with Polish chars.
    const json = try chilkat.JsonObject.init();
    defer json.deinit();
    json.loadFile("qa_data/json/has_polish_chars.json") catch {
        std.debug.print("{s}\n", .{try json.getLastErrorText(alloc)});
        return;
    };

    // Add the request params expected by the server-side:
    req.addParam("tytul", try json.stringOf(alloc, "tytul"));
    req.addParam("tresc", try json.stringOf(alloc, "tresc"));

    // Indicate we wish to explicitly send the charset attribute in the HTTP request header.
    req.setSendCharset(true);

    // Send the POST
    // You can send the POST to the URL below.  It will respond with the request body in quoted-printable format.
    // Using quoted-printable, we can easily see the binary bytes for the accented chars.

    req.setHttpVerb("POST");
    req.setContentType("application/x-www-form-urlencoded");

    const resp = try chilkat.HttpResponse.init();
    defer resp.deinit();
    http.httpReq("https://www.chilkatsoft.com/echoPost.cshtml", req, resp) catch {
        std.debug.print("{s}\n", .{try http.getLastErrorText(alloc)});
        return;
    };

    std.debug.print("{s}\n", .{try http.getLastHeader(alloc)});
    std.debug.print("{s}\n", .{try resp.getBodyStr(alloc)});

    // Sample output:

    // --------------------------------------------------
    // POST /echoPost.cshtml HTTP/1.1
    // Host: www.chilkatsoft.com
    // Content-Type: application/x-www-form-urlencoded; charset=utf-8
    // Content-Length: 79
    //
    // <pre>tytul=3DPrzyk%C5%82ad&amp;tresc=3DPrzyk%C5%82ad
    // %82oszenie</pre>
    // --------------------------------------------------

    // We can see by the %C5%82 that utf-8 was sent, because %C5%82 is the 2-byte representation of a particular Polish char.

    // -----------------------
    // However.. we can change the charset used for the HTTP request by specifying the request object's charset.

    req.setSendCharset(true);
    req.setCharset("windows-1250");
    req.setHttpVerb("POST");
    req.setContentType("application/x-www-form-urlencoded");

    http.httpReq("https://www.chilkatsoft.com/echoPost.cshtml", req, resp) catch {
        std.debug.print("{s}\n", .{try http.getLastErrorText(alloc)});
        return;
    };

    std.debug.print("{s}\n", .{try http.getLastHeader(alloc)});
    std.debug.print("{s}\n", .{try resp.getBodyStr(alloc)});

    // Sample output...
    // You can see how the bytes used for the Polish chars are now 1-byte per char (i.e. using Windows-1250)

    // --------------------------------------------------
    // POST /echoPost.cshtml HTTP/1.1
    // Host: www.chilkatsoft.com
    // Content-Type: application/x-www-form-urlencoded; charset=windows-1250
    // Content-Length: 70
    //
    // <pre>tytul=3DPrzyk%B3ad&amp;tresc=3DPrzyk%B3ad
    // e</pre>
    // --------------------------------------------------
}