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.
