You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Erlang在Linux终端打印UTF-8字符显示编码而非原字符的解决求助

解决Erlang在Linux终端打印UTF-8字符的问题

问题原因

你当前代码里的Text = "あいうえお"在Erlang中是Unicode代码点的整数列表(比如"あ"对应整数12354,即0x3042)。使用~ts格式符时,若Erlang输出编码未匹配终端UTF-8设置,会默认输出代码点的转义序列\x{3042},而非实际字符。

解决方案

方法1:转换为UTF-8二进制后输出

通过unicode:characters_to_binary/2将Unicode代码点列表转成UTF-8编码的二进制,再用~s格式符输出(~s用于打印字节序列):

-module('main').
-export([main/1]).

main(_) ->
  Text = "あいうえお",
  % 将Unicode代码点列表转换为UTF-8二进制
  Utf8Bin = unicode:characters_to_binary(Text, utf8),
  io:format("~s~n", [Utf8Bin]),
  halt().

方法2:用io:put_chars直接输出UTF-8

io:put_chars/3可指定编码直接输出字符列表,无需手动转换:

-module('main').
-export([main/1]).

main(_) ->
  Text = "あいうえお",
  % 指定Unicode编码和输出格式为UTF-8
  io:put_chars(unicode, utf8, Text),
  io:nl(), % 换行
  halt().

验证运行

编译运行修改后的代码:

$ erlc main.erl
$ erl -noshell -run main main run
あいうえお

补充说明

  • 你之前尝试的list_to_bin无效,因为它只是把整数列表直接转成二进制(每个代码点占2字节大端),而非UTF-8编码的3字节格式。
  • Ubuntu 22.04终端默认支持UTF-8,只要输出正确的UTF-8字节流,就能正常显示日文字符。

内容的提问来源于stack exchange,提问作者klsn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:50:23