Default UTF-8 Charset for Text-Based Responses¶
SWS automatically appends a charset=utf-8 parameter to the Content-Type header for a predefined list of text-based MIME types.
Included MIME Types¶
The charset=utf-8 parameter will be added to responses with the following MIME types:
application/atom+xmlapplication/rss+xmltext/calendartext/csvtext/htmltext/markdowntext/plaintext/xml
For example, a robots.txt file will be served with the header: Content-Type: text/plain; charset=utf-8.
Rationale¶
Without this default behavior, files like robots.txt, llms.txt, plain READMEs and other text-based resources are served without an explicit character encoding. When the charset is missing, browsers and HTTP clients fall back to outdated, locale-specific guesses (such as Windows-1252 or US-ASCII). This default guessing often results in mojibake—corrupting international symbols, accents, and non-ASCII characters. Forcing UTF-8 ensures reliable, cross-platform text rendering.
The option is enabled by default and can be controlled by boolean --text-charset option or the equivalent SERVER_TEXT_CHARSET env.
Custom HTTP Headers Take Precedence
Users can turn off the default UTF-8 charset if wanted or use Custom HTTP Headers with glob patterns to selectively apply charset to specific files.
Usage examples¶
Default (no flag needed, already on):
static-web-server --root ./public
# robots.txt is served as: Content-Type: text/plain; charset=utf-8
Disable the feature entirely:
static-web-server --root ./public --text-charset=false
Equivalent configuration file:
[general]
root = "./public"
text-charset = false
Equivalent environment variable:
export SERVER_TEXT_CHARSET=false
static-web-server --root ./public