Opened 2 years ago

Last modified 15 months ago

#5666 new bug

Can't use writeFile to write unicode characters.

Reported by: tsou Owned by:
Priority: normal Milestone: 7.6.2
Component: libraries (other) Version: 7.4.2
Keywords: unicode writeFile Cc:
Operating System: OpenBSD Architecture: x86_64 (amd64)
Type of failure: Runtime crash Difficulty: Unknown
Test Case: Blocked By:
Blocking: Related Tickets:

Description

I tried to the "locale" environmental variables to "en_US.utf8",
but still I cannot write unicode characters.

source:

main = do
    hSetEncoding stdout utf8
    putStrLn "αρχίδια"
    writeFile "hello.txt" "σκατούλες"

output:

αρχίδια
commitBuffer: invalid argument (Illegal byte sequence)

without manually hSetEncoding stdin, putStrLn also
fails with the same error message.

From what I was told on #haskell, on linux ghc
uses setlocale to figure out what encoding to use,
but this is not present in OpenBSD.

Simply making those functions read $LANG (I think)
would solve this for OpenBSD, but I might be wrong.

Change History (4)

comment:1 Changed 2 years ago by igloo

  • Difficulty set to Unknown
  • Milestone set to 7.6.1
  • Status changed from new to infoneeded

What exactly do you mean by 'the "locale" environmental variables'?

Also, do you have a "locale" program? If so, what is the output when you run it?

comment:2 Changed 19 months ago by igloo

  • Milestone changed from 7.6.1 to 7.6.2

comment:3 Changed 15 months ago by igloo

  • Resolution set to worksforme
  • Status changed from infoneeded to closed

No response from submitter, so closing.

comment:4 Changed 15 months ago by tsou

  • Keywords unicode writeFile added
  • Resolution worksforme deleted
  • Status changed from closed to new
  • Version changed from 7.0.4 to 7.4.2

What exactly do you mean by 'the "locale" environmental variables'?

I meant LANG and LC_ALL, etc.

Also, do you have a "locale" program?
If so, what is the output when you run it?

There's no locale program. Only a setlocale(3) function..
http://www.openbsd.org/cgi-bin/man.cgi?query=setlocale&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html

Usually, applications (for example tmux, mutt, etc.) that
may need to output unicode characters, understand the
locale by reading those enviromental variables I mentioned
above. I thought it would work like that with haskell, but
I was wrong.

Let me know if you need anything else.

Thanks!

Note: See TracTickets for help on using tickets.