;doc: update the locale troubleshooting doc
This commit is contained in:
parent
5b88bfb834
commit
c0dc71ae25
@ -1643,40 +1643,30 @@ systems, that is ~/.local/bin and ~/.cabal/bin respectively.
|
||||
The command `env | grep LEDGER_FILE` should show it.
|
||||
You may need to use `export`. Here's an [explanation](http://stackoverflow.com/a/7411509).
|
||||
|
||||
**"Illegal byte sequence" or "Invalid or incomplete multibyte or wide character" errors**\
|
||||
In order to handle non-ascii letters and symbols (like £), hledger needs
|
||||
an appropriate locale. This is usually configured system-wide; you can
|
||||
also configure it temporarily. The locale may need to be one that
|
||||
supports UTF-8, if you built hledger with GHC < 7.2 (or possibly always,
|
||||
I'm not sure yet).
|
||||
**Getting errors like "Illegal byte sequence" or "Invalid or incomplete multibyte or wide character" or "commitAndReleaseBuffer: invalid arguement (invalid character)"**\
|
||||
Programs compiled with GHC (hledger, haskell build tools, etc.)
|
||||
need to have a UTF-8-aware locale configured in the environment,
|
||||
otherwise they will fail with these kinds of errors when they encounter non-ascii characters.
|
||||
|
||||
Here's an example of setting the locale temporarily, on Ubuntu GNU/Linux:
|
||||
To fix it, set the LANG environment variable to some locale which supports UTF-8.
|
||||
The locale you choose must be installed on your system.
|
||||
|
||||
Here's an example of setting LANG temporarily, on Ubuntu GNU/Linux:
|
||||
|
||||
```shell
|
||||
$ file my.journal
|
||||
my.journal: UTF-8 Unicode text # <- the file is UTF8-encoded
|
||||
$ locale -a
|
||||
my.journal: UTF-8 Unicode text # the file is UTF8-encoded
|
||||
$ echo $LANG
|
||||
C # LANG is set to the default locale, which does not support UTF8
|
||||
$ locale -a # which locales are installed ?
|
||||
C
|
||||
en_US.utf8 # <- a UTF8-aware locale is available
|
||||
en_US.utf8 # here's a UTF8-aware one we can use
|
||||
POSIX
|
||||
$ LANG=en_US.utf8 hledger -f my.journal print # <- use it for this command
|
||||
$ LANG=en_US.utf8 hledger -f my.journal print # ensure it is used for this command
|
||||
```
|
||||
|
||||
Exact spelling and capitalisation may be important. Note the difference on MacOS:
|
||||
```shell
|
||||
$ locale -a | grep -iE en_us.*utf
|
||||
en_US.UTF-8
|
||||
$ LANG=en_US.UTF-8 hledger -f my.journal print
|
||||
```
|
||||
|
||||
Here's one way to set it permanently, if you use a bash shell:
|
||||
|
||||
```shell
|
||||
$ echo "export LANG=en_US.utf8" >>~/.bash_profile
|
||||
$ bash --login
|
||||
```
|
||||
|
||||
If we preferred to use eg `fr_FR.utf8`, we might have to install that first:
|
||||
If available, `C.UTF-8` will also work.
|
||||
If your preferred locale isn't listed by `locale -a`, you might need to install it. Eg on Ubuntu/Debian:
|
||||
|
||||
```shell
|
||||
$ apt-get install language-pack-fr
|
||||
@ -1692,7 +1682,18 @@ POSIX
|
||||
$ LANG=fr_FR.utf8 hledger -f my.journal print
|
||||
```
|
||||
|
||||
Note some platforms allow variant locale spellings, but not all (ubuntu
|
||||
accepts `fr_FR.UTF8`, mac osx requires exactly `fr_FR.UTF-8`).
|
||||
Here's how you could set it permanently, if you use a bash shell:
|
||||
|
||||
`C.UTF-8` might be a simple choice that always works.
|
||||
```shell
|
||||
$ echo "export LANG=en_US.utf8" >>~/.bash_profile
|
||||
$ bash --login
|
||||
```
|
||||
|
||||
Exact spelling and capitalisation may be important. Note the difference on MacOS (`UTF-8`, not `utf8`).
|
||||
Some platforms (eg ubuntu) allow variant spellings, but others (eg macos) require it to be exact:
|
||||
|
||||
```shell
|
||||
$ locale -a | grep -iE en_us.*utf
|
||||
en_US.UTF-8
|
||||
$ LANG=en_US.UTF-8 hledger -f my.journal print
|
||||
```
|
||||
|
||||
Loading…
Reference in New Issue
Block a user