我在Mac Os X 10.5上(但我在10.4上重现了这个问题)
我正在尝试使用iconv将UTF-8文件转换为ASCII
utf-8文件包含'éàç'等字符
我希望重音字符变成最接近的ascii等价物
所以
我的命令是这样的:
iconv -f UTF-8 -t ASCII // TRANSLIT // IGNORE myutf8file.txt
这在Linux机器上运行良好
但在我当地的Mac Os XI上得到了这个例子:
è=>'e
à=>`a
我真的不明白为什么iconv在mac os x上返回这个奇怪的输出但是在linux上一切都很好
任何帮助?还是方向?
提前致谢
在CentOS 5.6上安装rvm后运行rvm notes:
dependencies:
# For RVM
rvm: yum install -y bash curl git # NOTE: For git you need the EPEL repository enabled
# For Ruby (MRI & Ree) you should install the following OS dependencies:
ruby: yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel ;
yum install -y make bzip2 ;
yum install -y iconv-devel # NOTE: For centos 5.4 final iconv-devel might not be available :(
Run Code Online (Sandbox Code Playgroud)
但iconv-devel无法找到: …
我正在尝试将字符串从CP932(也称为Windows-31J)转换为jf中的utf8.基本上我正在抓取一个忽略请求头中的utf-8请求并返回cp932编码文本的站点(即使html metatag表明该页面是shift_jis).
无论如何,我将整个页面存储在一个名为"html"的字符串变量中.从那里我试图使用以下代码将其转换为utf8:
var Iconv = require('iconv').Iconv;
var conv = new Iconv('CP932', 'UTF-8//TRANSLIT//IGNORE');
var myBuffer = new Buffer(html.length * 3);
myBuffer.write(html, 0, 'utf8')
var utf8html = (conv.convert(myBuffer)).toString('utf8');
Run Code Online (Sandbox Code Playgroud)
结果不是它应该是什么.例如,字符串: "投稿者さんの稚内全日空ホテルのクチコミ(感想·情报)" 出来作为"ソスソスソスËソスメゑソスソスソスソスソスソス吨ソスソスソス小号ソスソスソスソスソスŽソスËソスソスソスフクソス`ソスRソス〜(ソスソスソスzソスEソスソスソスソス)"
如果我删除// TRANSLIT // IGNORE(这会导致它返回缺少字符的类似字符,并且没有省略不可转码的字符),我收到此错误:错误:EILSEQ,非法字符序列.
我愿意使用可以在nodejs中实现的任何解决方案,但是我的搜索结果在nodejs-iconv模块之外没有产生很多选项.
nodejs-iconv ref:https://github.com/bnoordhuis/node-iconv
谢谢!
编辑24.06.2011:我已经开始实施Java解决方案.但是如果有人能解决这个问题,我仍然会对这个问题的javascript解决方案感兴趣.
javascript character-encoding iconv serverside-javascript node.js
R无法正确显示阿拉伯文字.当我使用阿拉伯语时,我会得到非常奇怪的东西.这是一个截图:

问题是我想用阿拉伯语文本创建一个wordcloud,我需要先解决这个问题.
R版本:R 2.15.2 GUI 1.53 Leopard构建64位(6335)
以下是更多信息:
> options("encoding")
$encoding
[1] "native.enc"
> Encoding("????")
[1] "unknown"
Run Code Online (Sandbox Code Playgroud)
SessionInfo():
> sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
locale:
[1] C/C/C/C/de_DE/C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] tools_2.15.2
>
Run Code Online (Sandbox Code Playgroud)
一些修补:
> x = "?????"
> Encoding(x) = "UTF-8"
> x
[1] "<U+0645><U+0631><U+062D><U+0628><U+0627>"
> Encoding(iconv(x))
[1] "unknown"
Run Code Online (Sandbox Code Playgroud)
更多信息:
> Sys.getlocale()
[1] "C/C/C/C/de_DE/C"
> Sys.setlocale("LC_ALL", "en_US.utf8")
[1] ""
Warning message: …Run Code Online (Sandbox Code Playgroud) 我在将以下文件导入时遇到问题:http://www.kuleuven.be/bio/ento/temp/test.xlsx 以正确的编码方式导入 到R中.特别是,
library("xlsx")
read.xlsx("test.xlsx",1,header=F,colClasses=c("character"),encoding="UTF-8")
Run Code Online (Sandbox Code Playgroud)
给我
X1
1 a-cadinol
2 a-calacorene
3 a-caryophyllene alcohol
4 a-curcumene
5 a-elemol
6 a-muurolene
7 a-terpineol acetate
8 ß-4-dimethyl-3-cyclohexane-1-ethanol acetate
9 ß-bisabolene
10 ß-bisabolol
11 ß-bourbonene
12 ß-caryophyllene alcohol
13 ß-cyclocitral
14 ß-farnesol
15 ß-selinene
16 ß-sesquiphellandrene
17 <U+03B3>-cadinene
18 <U+03B3>-Carboethoxy-<U+03B3>-butyrolactone
19 <U+03B3>-ethyl-<U+03B3>-butyrolactone
20 <U+03B3>-eudesmol
21 <U+03B3>-muurolene
22 <U+03B3>-nonalactone
23 <U+03B3>-octalactone
24 <U+03B3>-selinene
25 <U+03B3>-undecalactone
26 d-cadinene
27 d-cadinol
28 d-muurolene
29 d-undecalactone
Run Code Online (Sandbox Code Playgroud)
但是a-,<U+03B3>-和d-应alpha- …
通过ruby2.0.0在Windows上安装iconv时
出错通过ruby2.0.0 在Windows上安装iconv时出错
我正在尝试安装iconv,但是当我运行以下命令时:
gem install iconv
Run Code Online (Sandbox Code Playgroud)
我的结果:
Temporarily enhancing Path to include DevKit...
Building native extensions. This could take a while...
Error : Error installing iconv:
ERROR: Failed to build gem native extension.
C:/Ruby/Ruby200/bin/ruby.exe -r ./siteconf20150217-3212-i8hzmh.rb extconf.rb
checking for rb_enc_get() in ruby/encoding.h... yes
checking for rb_sys_fail_str() in ruby.h... yes
checking for iconv() in iconv.h... no
checking for iconv() in -liconv... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or …Run Code Online (Sandbox Code Playgroud) 我正在调查字符编码如何影响排序.我的问题是:
如何将数据框的单个列更改为不同的字符编码?
对于上下文,我将在底部包含几个额外的步骤.
1)创建数据框:
d.enc <- data.frame( utf8 = c(" ", "_ ", " _"),
mac = c(" ", "_ ", " _"),
label = c("space", "underscore space", "space underscore") )
Run Code Online (Sandbox Code Playgroud)
2)转换为字符向量并尝试设置编码:
d.enc2$utf8 <- as.character(d.enc$utf8)
d.enc2$mac <- as.character(d.enc$mac)
d.enc2$label <- as.character(d.enc$label)
Encoding(d.enc2$utf8) <- "UTF-8"
Encoding(d.enc2$mac) <- "MACINTOSH"
Encoding(d.enc2$utf8)
# [1] "unknown" "unknown" "unknown"
Encoding(d.enc2$mac)
# [1] "unknown" "unknown" "unknown"
Run Code Online (Sandbox Code Playgroud)
3)那不是我所希望的.我原以为:
# [1] "UTF-8" "UTF-8" "UTF-8" and
# [1] "MACINTOSH" "MACINTOSH" "MACINTOSH"
Run Code Online (Sandbox Code Playgroud)
4)我支持我想要的编码吗?(在mac上运行)
temp <- iconvlist()
temp[399]
# [1] "UTF-8"
temp[338] …Run Code Online (Sandbox Code Playgroud) 您好,我对此查询有疑问
\n\nSELECT * FROM table WHERE `name` LIKE \'%t\xc3\xa9st%\'\nRun Code Online (Sandbox Code Playgroud)\n\nHMTL 和 SQL 表都有 utf-8 编码,但不幸的是没有mysql_set_charset(\'utf-8\'),我无法使用它。
我已经尝试过,iconv("UTF-8", "ISO-8859-1", $name)但查询仅匹配test.
我想匹配所有这些:(test, t\xc3\xa9st, t\xc3\xa8st, t\xc3\xabst因为它可以与mysql_set_charset)
编辑:
\n\nSET NAMES utf8更有可能...数据库使用utf8 编码,不幸的是内容是从网络填充的,没有mysql_set_charsetnor SET NAMES。
目前,如果使用这些函数,结果会很混乱。
\n\nversion() 5.1.41-3ubuntu12.9
编辑2:
\n\n当我使用SET NAMES utf8它时,它们只匹配t\xc3\xa9st,它们看起来像t\xc3\x83\xc2\xa9st
当我使用iconv("UTF-8", "ISO-8859-1", $name)它时仅匹配test
我正在使用mingw gcc和msys来构建一些GNU实用程序.在过去,我遇到了很多由需要不同版本的libiconv的不同可执行文件引起的问题,所以为了避免这个问题,我想将iconv静态链接到可执行文件中.
我使用mingw和msys with configure --enable-static构建了libiconv.这将创建DLL,.dll.a导入库和普通的.a静态库.
但是,当我尝试构建另一个与简单的-liconv链接的程序时,我得到了链接的DLL.我假设ld由于某种原因更喜欢导入库而不是静态库(通常不是一个糟糕的选择,这是一个特例).
如何确保我构建的程序是静态链接的?一个显而易见的方法是在执行构建时删除.dll.a文件.这可能是最简单的选择,但我很好奇 - 是否有一个链接器标志我可以设置(通过像LDFLAGS之类的东西)来强制iconv被静态加载(理想情况下,不会影响其他库,但是在紧要关头我会没事的静态加载所有库)
为了索引和搜索的目的,我需要“展平”一些 Unicode 字符串。例如,我需要转换G\xc3\xb6the\xd0\xa4\xe2\x82\xac为 ASCII。最后两个字符在 ASCII 中没有紧密的表示,因此可以完全丢弃它们。所以我的期望是
echo iconv("UTF-8", "ASCII//TRANSLIT//IGNORE", "G\xc3\xb6the\xd0\xa4\xe2\x82\xac");\nRun Code Online (Sandbox Code Playgroud)\n\n是Gothe,但它输出Gothe?EUR.
除了字母之外,我还希望将所有各种 Unicode 数字和标点符号(例如句号、逗号、破折号、斜杠等)替换为最接近的 ASCII 对应项,这在ASCII//TRANSLIT//IGNORE函数中已经做到了,iconv但还没有不会为无法找到任何 ASCII 替换的 Unicode 字符生成一些垃圾输出。我希望这些角色被完全忽略。
如何得到预期的结果?有没有更好的方法,也许使用intl库?