作为一名 C 程序员,我惊讶地看到wc -c(计算字节数)和wc -m(计算字符数)对于我的一个长文本文件输出非常不同的结果。我一直被告知那sizeof(char)是 1 个字节。
qdii@nomada ~/Documents $ wc -c sentences.csv
102990983 sentences.csv
qdii@nomada ~/Documents $ wc -m sentences.csv
89023123 sentences.csv
Run Code Online (Sandbox Code Playgroud)
有什么解释吗?
Excel 文件可以使用以下方法转换为 CSV:
$ libreoffice --convert-to csv --headless --outdir dir file.xlsx
Run Code Online (Sandbox Code Playgroud)
一切似乎都很好。但是,编码设置为不稳定的东西。如果我从 LibreOffice Calc 手动“另存为”,我得到的不是 UTF-8 mdash (-),而是一个 \227 (?)。在 CSV 上使用文件给了我“非 ISO 扩展 ASCII 文本,行很长”。所以,两个问题:
我要转换的特定文件在这里。
具有俄语 UI 的应用程序显示问号而不是大部分文本(尽管某些元素呈现正常)。
系统语言环境是英语(en_US,en_IE),我已经尝试过 Ubuntu ant XUbuntu 12.04 和 Wine 1.5。
我试过用
LANG=ru_RU.utf8 wine myapp.exe
Run Code Online (Sandbox Code Playgroud)
但它没有帮助。
我也检查了ttf-mscorefonts-installer安装。
如果我使用 Windows,在控制面板中为非 unicode 应用程序设置俄语代码页可以解决问题。
有任何想法吗?
我有一个二进制字符集的 CSV 文件,但我必须转换为 UTF-8 才能在 HDFS (Hadoop) 中处理。
我使用以下命令来检查字符集。
file -bi filename.csv
Run Code Online (Sandbox Code Playgroud)
输出 :
application/octet-stream; charset=binary
Run Code Online (Sandbox Code Playgroud)
当我尝试将文件从二进制文件转换为 UTF-8 时,它会引发错误。
iconv -f binary -t utf-8 fiename.csv
iconv: conversion from binary' is not supported
Try iconv --help' or iconv --usage' for more information.
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我了解是否可以转换,我可以使用 head 命令查看数据。
这是什么意思,二进制表示不可读,但是head 命令或记事本如何读取数据。
od -tc < 文件名.csv | 头
0000000 357 273 277 | | R e q u e s t _ I D #
0000020 D # T y p e # D …Run Code Online (Sandbox Code Playgroud) 我写了一个挪威降价文档:
$ file brukerveiledning.md
brukerveiledning.md: UTF-8 Unicode text
Run Code Online (Sandbox Code Playgroud)
我已使用以下markdown命令将其转换为 HTML :
$ markdown > brukerveiledning.html < brukerveiledning.md
$ file brukerveiledning.html
brukerveiledning.html: UTF-8 Unicode text
Run Code Online (Sandbox Code Playgroud)
但是,Firefox 坚持使用“windows-1252”编码,打破了非 ASCII 字符。我已经尝试将后备文本编码从“当前语言环境的默认值”(在英国应该是 ISO-8859-1 或 UTF-8)更改为“中欧,ISO”,“中欧,微软” ”和“其他(包括西欧)”。这些都不能显示 æ、ø 和 å。没有 Unicode 选项。我还尝试将intl.fallbackCharsetList.ISO-8859-1about:config更改为各种值,例如utf8, utf-8, iso-8859-1,但没有运气。
使用这个markdown包:
$ pacman --query --owns "$(which markdown)"
/usr/bin/markdown is owned by markdown 1.0.1-6
Run Code Online (Sandbox Code Playgroud)
和这个语言环境:
$ locale
LANG=en_GB.utf8
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME="en_GB.utf8"
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8"
LC_MEASUREMENT="en_GB.utf8"
LC_IDENTIFICATION="en_GB.utf8" …Run Code Online (Sandbox Code Playgroud) 我在 Arch Linux 上运行 Firefox 52.0.2,虽然在系统上(例如:在 Nautilus 中)我有日语字符显示正常,但在 Firefox 中它们是不可读的,因为为它们显示的所有内容是这样的:
这是因为我没有安装允许显示为 Firefox 安装的平假名、片假名和汉字的字体。但问题是我不完全确定我是如何为 Firefox 获得这个的。我尝试在 Firefox 中安装日语词典,但这似乎没有任何区别。
那么我必须做什么和安装才能让它们正确显示?因为在这种形式下,阅读和编写它们显然非常困难。
我收到了一个带有FF FEBOM的 .csv 文件:
$ head -n1 dotan.csv | hd
00000000 ff fe 41 00 64 00 20 00 67 00 72 00 6f 00 75 00 |..A.d. .g.r.o.u.|
Run Code Online (Sandbox Code Playgroud)
当使用awk解析它我得到了一堆空字节,我怀疑是由于字节顺序。如何交换此文件上的字节顺序(使用 CLI),以便普通工具可以使用它?
请注意,我认为此文件只是 ASCII 字符(BOM 除外),但我无法确认grep它是否为二进制文件:
$ grep -P '^[\x00-\x7f]' dotan.csv
Binary file dotan.csv matches
Run Code Online (Sandbox Code Playgroud)
在 VIM 中搜索相同的字符串显示每个字符匹配!
使用iconvto 转换为 ASCII 并没有摆脱 \x00 值,实际上它使问题变得更糟,因为现在它们看起来像空字节而不是 UTF-8!
$ iconv -f UTF-8 -t ASCII dotan.csv > fixed.txt
iconv: illegal input sequence at position 0 …Run Code Online (Sandbox Code Playgroud) 问题是撰写键工作正常,但某些应用程序不接受其中的某些字符。例如,我可以?在 Emacs ( Compose+ 8+ 8) 中输入字符,但这在 FireFox、Konsole 和 Kate 中不起作用。但是许多其他字符,例如在€那里输入(在 FireFox、Konsole 和 Kate 中)使用Compose工作得很好。此外,我可以通过简单的复制粘贴(从两个剪贴板中的任何一个)插入问题符号。
那么,是什么原因造成的,如何解决呢?
抱歉,我不知道如何研究这个问题。我发现有些人的 Compose 键在某些应用程序中根本不起作用,但在我的情况下它是有效的,尽管部分原因。
设置:在/etc/default/keyboardKDE 和 KDE 键盘设置中,组合键都绑定到右侧的 Super 键。
我正在使用 wget 下载静态 html 页面。W3C 验证器告诉我该页面以 UTF-8 编码。然而,当我在下载后查看文件时,我得到了一堆二进制废话。我在 Ubuntu 上,我认为默认编码是 UTF-8?这就是我的语言环境文件似乎所说的。为什么会发生这种情况,我该如何纠正?
另外,看起来像Content-Encoding: gzip。也许这会有所不同?
这是一个简单的请求:
wget https://www.example.com/page.html
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
wget https://www.example.com/page.html -q -O - | iconv -f utf-16 -t utf-8 > output.html
Run Code Online (Sandbox Code Playgroud)
哪个返回: iconv: illegal input sequence at position 40
cat'ing 文件返回如下所示的二进制文件:
l???u?`?q"?:)s??d?__??~i??6n)T?$H?#???QJ
Run Code Online (Sandbox Code Playgroud)
结果xxd output.html | head -20:
00000000: 1f8b 0800 0000 0000 0003 bd56 518f db44 ...........VQ..D
00000010: 107e a6bf 62d4 8a1e 48b9 d8be 4268 9303 .~..b...H...Bh..
00000020: 8956 082a 155e 7a02 21dd cbd8 3bb6 97ae .V.*.^z.!...;... …Run Code Online (Sandbox Code Playgroud) 这里有一些关于以流形式存储在 zip 文件(希伯来语、中文、日语或韩语)中的文件名称中的非 ASCII 字母的问题。然而,提供的解决方案都没有帮助我使用来自 Windows 机器的带有西里尔字母的 zipfile。
该文件本身有一个西里尔文名称(??????.zip - 可下载链接)。这是一个包含零长度内容的档案,仅用于说明目的。
unzip -l 印刷:
Archive: ??????.zip
Length Date Time Name
--------- ---------- ----- ----
0 2017-05-03 18:19 ???????/ict_inf.pdf
--------- -------
0 1 file
Run Code Online (Sandbox Code Playgroud)
丑陋???????代表字节序列C9 AB DF E8 AB DF BC AB DF。
我知道(通过使用 GMail 预览功能)这应该是
Archive: ??????.zip
Length Date Time Name
--------- ---------- ----- ----
0 2017-05-03 18:19 ?????????/ict_inf.pdf
--------- -------
0 1 file
Run Code Online (Sandbox Code Playgroud)
那就是我们需要映射C9 AB DF E8 …
firefox ×2
locale ×2
unicode ×2
arch-linux ×1
command-line ×1
compose-key ×1
conversion ×1
gzip ×1
http ×1
kde ×1
language ×1
libreoffice ×1
wc ×1
wget ×1
wine ×1
x11 ×1
zip ×1