【问题标题】:Check if utf8 conversion needed and convert to utf8检查是否需要 utf8 转换并转换为 utf8
【发布时间】:2019-09-19 09:29:32
【问题描述】:

我需要逐行读取从服务器接收的文件,检查数据是否需要utf8转换,如果需要将其转换为utf8并传递。

如何检查是否需要 utf8 转换?

为了转换为 utf8,我可以使用 icu 库中的 toUTF8String。 toUTF8String 是否在内部检查输入是否已经在 UTF8 中?

【问题讨论】:

  • 我认为这很难做到。服务器不知道它的数据是什么格式的吗?如果不是 UTF8 - 7 位 ASCII 是什么?带有代码页 (ANSI) 的 8 位 ASCII?还有什么?
  • 检查uchardet
  • 检查字节流是否使用 UTF-8 编码是 perfectly feasible 但是,如果您不知道数据以哪种编码方式传入(UTF-8 除外) ,然后盲目地转换成UTF-8就是自找麻烦。
  • @gustgr 好吧,你可以检查它是否不是 UTF-8 或检查它是否是概率 UFT-8,但不是如果它 is
  • @TomBlodget 如果流损坏或截断,我明白你在说什么。但是假设一个人获得了代表编码代码点的 1、2、3 或 4 个字节的完整未损坏序列,那么可以确定它们是否是有效的 UTF-8,对吧?我想这并不一定意味着它真的是 UTF-8,而是像 UTF-8 这样的东西。这就是你说“概率”的原因吗?

标签: c++ unicode utf-8


【解决方案1】:
#

# convert a file from UTF-16 to UTF-8 if it is UTF-16

if [ $# -ne 1 ]; then
  echo Usage: 'utf16-to-utf8 <file>'
  exit 0
fi
if [ `uchardet $1` != 'UTF-16' ]; then
  echo $1 is not UTF-16
  exit 0
fi
iconv -f UTF-16LE -t UTF-8 $1  |sed '1s/^\xEF\xBB\xBF//' >$$
mv $$ $1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-21
    • 2011-08-02
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多