On Mon, Nov 3, 2025 at 7:10 AM Thomas Grund <[email protected]>
wrote:

> Thanks for clarifying this and it is working now with encoding set to
> UTF-8.
> One advantage is the smaller file size.
> Another small point that comes up: The output file (here Sum.js) is not a
> text file anymore in the sense that the file contains zero bytes \x00 now.
> So for handling this (load Sum.js and copy it to another html file) we have
> to switch to binary file handling which is not a problem at all.
>

Interesting yes, this is a little unfortunate:

```
$ emcc ~/test/hello.c -sSINGLE_FILE
$ file a.out.js
a.out.js: data

$ emcc ~/test/hello.c -sSINGLE_FILE -sSINGLE_FILE_BINARY_ENCODE=0
$ file a.out.js
a.out.js: JavaScript source, ASCII text, with very long lines (20202)
```

Although I guess this doesn't really have any practical downsides, is that
right Jukka?



>
> Thanks again
> Thomas
>
>
>
>
> jj schrieb am Montag, 3. November 2025 um 15:05:46 UTC+1:
>
>> Thanks for reporting this.
>>
>> This was due to a planned change, although we did not sufficiently
>> highlight what is going on in this case.
>>
>> Recently we migrated the SINGLE_FILE mode to no longer use base64, but
>> directly embed the binary content in a UTF-8 encoded string. However, this
>> change requires that the served files are explicitly annotated to be
>> encoded as UTF-8, or otherwise browsers default to legacy behavior, and
>> assume Windows CP1252 encoding. (maybe on Windows only, not completely sure)
>>
>> A quick fix is to add <meta charset='utf-8'> in the <head> section of the
>> above index.html. That will cause the browser to change the defaults also
>> for all downloaded .js files to UTF-8.
>>
>> The PR https://github.com/emscripten-core/emscripten/pull/25134
>> internally addressed the change in encoding, and I was thinking that would
>> transparently cover every use case. I.e. originally I had a mindset that
>> users of SINGLE_FILE would all be doing "-sSINGLE_FILE -o foo.html", i.e.
>> they'd be generating a single .html file as output.
>>
>> Though in your above example, you are doing "-sSINGLE_FILE -o foo.js", to
>> use the single file mode in a "two file" mode, by then manually providing a
>> index.html file. That use then would not automatically get the UTF-8
>> encoding declaration.
>>
>> Testing locally, I see that adding <meta charset='utf-8'> in the <head>
>> section fixes up the test case.
>>
>> Authored a PR https://github.com/emscripten-core/emscripten/pull/25704
>> to help users be aware that declaring the UTF-8 encoding is now explicitly
>> necessary for SINGLE_FILE mode - the legacy Windows CP1252 will
>> unfortunately no longer work with SINGLE_FILE in binary encoding mode. If
>> Windows CP1252 is needed for some reason, one can still fall back with
>> -sSINGLE_FILE_BINARY_ENCODE=0 like Sam mentioned.
>>
>> On Friday, October 31, 2025 at 11:37:32 PM UTC+2 [email protected] wrote:
>>
>>> BTW, if you want to get things working quickly you should be able use
>>> `-sSINGLE_FILE_BINARY_ENCODE=0`.  This setting was added specifically in
>>> case a bug this showed up/
>>>
>>> cheers,
>>> sam
>>>
>>> On Fri, Oct 31, 2025 at 8:54 AM Thomas Grund <[email protected]>
>>> wrote:
>>>
>>>> Thanks for analyzing!
>>>>
>>>> Thomas
>>>>
>>>> [email protected] schrieb am Donnerstag, 30. Oktober 2025 um 18:32:45
>>>> UTC+1:
>>>>
>>>>> Thanks for reporting, this turns out ot be a recent regression in
>>>>> SINGLE_FILE. I bisected to
>>>>>
>>>>> https://github.com/emscripten-core/emscripten/pull/25599
>>>>>
>>>>> and posted there.
>>>>>
>>>>> - Alon
>>>>>
>>>>>
>>>>> On Thu, Oct 30, 2025 at 6:02 AM Thomas Grund <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> The following example does
>>>>>>
>>>>>>    -  not work with current emcc 4.0.18 in Chrome.
>>>>>>
>>>>>> It
>>>>>>
>>>>>>    - works with current emcc 4.0.18 in Firefox and it
>>>>>>    - works with emcc 4.0.16 in Chrome.
>>>>>>
>>>>>> I use local files on Windows 11.
>>>>>>
>>>>>> Example index.html:
>>>>>> <!DOCTYPE html>
>>>>>> <html>
>>>>>> <head>
>>>>>> <script>
>>>>>> function compute() {
>>>>>> a=parseFloat(document.getElementById('a').value);
>>>>>> b=parseFloat(document.getElementById('b').value);
>>>>>> document.getElementById('c').innerText = Module.Sum(a, b);
>>>>>> }
>>>>>> </script>
>>>>>> <script src="Sum.js"></script>
>>>>>> </head>
>>>>>> <body>
>>>>>> <input id="a" type="number" onchange="compute()">
>>>>>> <input id="b" type="number" onchange="compute()">
>>>>>> <div id="c">Result</div>
>>>>>> </body>
>>>>>> </html>
>>>>>>
>>>>>> Example Sum.cpp:
>>>>>> #include <emscripten/bind.h>
>>>>>>
>>>>>> double Sum(double a, double b) {
>>>>>>    return a+b;
>>>>>> }
>>>>>>
>>>>>> EMSCRIPTEN_BINDINGS(Module) {
>>>>>>    emscripten::function("Sum", &Sum);
>>>>>> }
>>>>>>
>>>>>> Compile with:
>>>>>> emcc -o Sum.js Sum.cpp -sSINGLE_FILE --bind -sASSERTIONS
>>>>>>
>>>>>> Error in Chrome Console:
>>>>>> failed to asynchronously prepare wasm: CompileError:
>>>>>> WebAssembly.instantiate(): section was shorter than expected size (18371
>>>>>> bytes expected, 207 decoded) @+219
>>>>>> instantiateArrayBuffer @ Sum.js:634
>>>>>> await in instantiateArrayBuffer
>>>>>> instantiateAsync @ Sum.js:645
>>>>>> createWasm @ Sum.js:713
>>>>>> (anonymous) @ Sum.js:2761Understand this error
>>>>>> Sum.js:275 Uncaught (in promise) TypeError: filename.startsWith is
>>>>>> not a function
>>>>>> isFileURI @ Sum.js:275
>>>>>> instantiateArrayBuffer @ Sum.js:637
>>>>>> await in instantiateArrayBuffer
>>>>>> instantiateAsync @ Sum.js:645
>>>>>> createWasm @ Sum.js:713
>>>>>> (anonymous) @ Sum.js:2761Understand this error
>>>>>> Sum.js:794 still waiting on run dependencies:
>>>>>> (anonymous) @ Sum.js:794
>>>>>> setInterval
>>>>>> addRunDependency @ Sum.js:784
>>>>>> createWasm @ Sum.js:674
>>>>>> (anonymous) @ Sum.js:2761Understand this error
>>>>>> Sum.js:796 dependency: wasm-instantiate
>>>>>> (anonymous) @ Sum.js:796
>>>>>> setInterval
>>>>>> addRunDependency @ Sum.js:784
>>>>>> createWasm @ Sum.js:674
>>>>>> (anonymous) @ Sum.js:2761Understand this error
>>>>>> Sum.js:799 (end of list)
>>>>>> (anonymous) @ Sum.js:799
>>>>>> setInterval
>>>>>> addRunDependency @ Sum.js:784
>>>>>> createWasm @ Sum.js:674
>>>>>> (anonymous) @ Sum.js:2761Understand this error
>>>>>>
>>>>>> What am I doing wrong?
>>>>>>
>>>>>> Thanks for your help!
>>>>>> Thomas
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "emscripten-discuss" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to [email protected].
>>>>>> To view this discussion visit
>>>>>> https://groups.google.com/d/msgid/emscripten-discuss/504419d6-cdcf-4eec-9a1e-e7f69f87a129n%40googlegroups.com
>>>>>> <https://groups.google.com/d/msgid/emscripten-discuss/504419d6-cdcf-4eec-9a1e-e7f69f87a129n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "emscripten-discuss" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>>
>>> To view this discussion visit
>>>> https://groups.google.com/d/msgid/emscripten-discuss/5b591cef-ad8e-467f-95dc-b43719e21086n%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/emscripten-discuss/5b591cef-ad8e-467f-95dc-b43719e21086n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> --
> You received this message because you are subscribed to the Google Groups
> "emscripten-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion visit
> https://groups.google.com/d/msgid/emscripten-discuss/06422e62-f8a8-4c17-953a-d72bee8d0108n%40googlegroups.com
> <https://groups.google.com/d/msgid/emscripten-discuss/06422e62-f8a8-4c17-953a-d72bee8d0108n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/emscripten-discuss/CAL_va29pEvcr0a2%3DLZr%3DLf-9Wnq3a9pmxwXxxRNmv3kSXtVxCg%40mail.gmail.com.

Reply via email to