[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: BOM (byte order mark) in process stdout and stderr
From: |
Eli Zaretskii |
Subject: |
Re: BOM (byte order mark) in process stdout and stderr |
Date: |
Thu, 25 Jun 2015 22:37:44 +0300 |
> From: Jürgen Hötzel <address@hidden>
> Date: Thu, 25 Jun 2015 20:37:41 +0200
> Cc: address@hidden
>
> > (let ((default-process-coding-system '(utf-8-with-signature .
> > utf-8-with-signature)))
> > (start-file-process
> > "BOM"
> > (generate-new-buffer "*bom-test*")
> > "~/tmp/Hello.exe"))
> >
> > This results in the following process-buffer (hexl-mode):
> >
> > 00000000: efbb bf53 5444 4f55 540a 5354 4445 5252 ...STDOUT.STDERR
> > 00000010: 0a0a 5072 6f63 6573 7320 424f 4d20 6669 ..Process BOM fi
> > 00000020: 6e69 7368 6564 0a nished.
> >
> > The stdout BOM was correctly removed but the stderr BOM is still
> present.
> >
> > According to
> >
>
> http://www.gnu.org/software/emacs/manual/html_node/elisp/Output-from-Processes.html
>
> >
> > there is now way to handle stderr separately. I made this workaround for
> the
> > Emacs fsharp-mode:
> >
> >
>
> https://github.com/juergenhoetzel/fsharpbinding/commit/d0d3600c38d0e9f47a621583d0fc82685feda196
>
> >
> > Are there any better solutions?
>
> You didn't tell what version of Emacs do you want this to be solved.
>
>
> GNU Emacs 24.5.1
Then I think you will have to remove the second BOM in your
application's Lisp code. start-file-process redirects both standard
output and standard error to the same file descriptor, and Emacs reads
their mix from that file descriptor. It will remove 1 BOM, but the
other will be left alone.
Alternatively, separate the standard output and standard error via
shell redirection, and then read one of them separately from a file.