我有一个SQL转储文件,包含错误存储的西里尔俄语(WINDOWS-1251)文本,该示例Èðàíñêèå应正确显示为????????.
在过去,我已经成功转换了sql文件,但内存在我所做的和以什么顺序失败.
从逻辑上讲,它是有意义的,因为它存储在LATIN1中,我会从LATIN1转换为WINDOWS-1251,然后从WINDOWS-1251转换为UTF-8 // TRANSLIT或类似的东西.
到目前为止,我已经尝试过:
iconv -f WINDOWS-1251 -t UTF-8//TRANSLIT -o new.sql snippet.sql
Run Code Online (Sandbox Code Playgroud)
输出:
?€?°? ??±?????? (不是我想要的)
iconv -f LATIN1 -t UTF-8//TRANSLIT -o new.sql snippet.sql
Run Code Online (Sandbox Code Playgroud)
输出:
Ã<88>ðà Ãñêèå (不是我想要的)
笔记
我可能已经转换了一次然后两次以获得我想要的结果,但我很确定在我转换的最后一步WINDOWS-1251到UTF-8//TRANSLIT我的笔记中记录的那一步.
另一个注意事项是,Èðàíñêèå当文件编码为utf8(在vim中为native)时,我正在查看SQL文件.如果我set enc=latin1在vim中做,那么我~Hð| íñêèå认为这不会让它更加混乱.
我以前转换编码通过iconv但今天我停止了一些新的东西,我
做了一个测试用例,让我的问题清楚:
目标是转换الحلقة الثالثة为其utf8版本:الحلقةالثالثة
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title> this text is from arabic language </title>
</head>
<body>
<p><span> الحلقة الثالثة</span></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
试图使用编码,ASCII , LATIN1 , windows-1252但没有运气我怎么告诉这种类型的编码是什么,以便转换它?谷歌翻译+ stackoverflow编辑器都能够检测到并隐蔽它?
另一个例子:这个网站http://kanjidict.stc.cx/recode.php能够正确转换编码,如果我检查Assume HTML (default: handle as plain text)
我错过了什么和那3个网站是做它正确转换????
GNU C库提供了iconv的实现 - 我该如何使用它?
简单程序:
#include <iconv.h>
int main( int argc, char **argv ) {
iconv_t cd = iconv_open( "UTF-8", "ISO-8859-1" );
iconv_close( cd );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译和链接:
$ gcc -Wall iconv.c -o iconv
/tmp/ccKAfXNg.o: In function `main':
iconv.c:(.text+0x19): undefined reference to `libiconv_open'
iconv.c:(.text+0x29): undefined reference to `libiconv_close'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
列出符号以显示它们存在!
$ nm -D /lib/libc-2.12.1.so | grep iconv
00017920 T iconv
00017ae0 T iconv_close
00017720 T iconv_open
Run Code Online (Sandbox Code Playgroud)
如果我将GNU libiconv库安装到/ usr/local并与-liconv链接,它可以工作.如何链接iconv的glibc实现?
编辑:根据评论要求提供更多信息:
列出/ usr中的所有iconv.h文件(1匹配)
$ find …Run Code Online (Sandbox Code Playgroud) 我有一个用于文件字符编码对话的PowerShell脚本.
Get-ChildItem -Path D:/test/data -Recurse -Include *.txt |
ForEach-Object {
$inFileName = $_.DirectoryName + '\' + $_.name
$outFileName = $inFileName + "_utf_8.txt"
Write-Host "windows-1251 to utf-8: " $inFileName -> $outFileName
E:\bin\iconv\iconv.exe -f cp1251 -t utf-8 $inFileName > $outFileName
}
Run Code Online (Sandbox Code Playgroud)
但它不是utf-8,而是将文件字符编码转换为utf-16.当我从命令行调用iconv实用程序时,它工作正常.
我错了什么?
我从网上获取资源,有时材料的编码不是100%UTF8字节序列有效.我使用iconv静默忽略这些序列以获得一个清理过的字符串.
@iconv = Iconv.new('UTF-8//IGNORE', 'UTF-8')
valid_string = @iconv.iconv(untrusted_string)
Run Code Online (Sandbox Code Playgroud)
但是现在iconv已被弃用,我看到它的弃用警告很多.
iconv将来会被弃用,请使用String #coding
我尝试使用String#encode's :invalid和:replace选项转换它,但它似乎没有工作(即没有删除不正确的字节序列).使用String#encode的正确方法是什么?
我试图使用以下脚本更改文件名:
find dir/-type f -exec mv {} $(echo {} | iconv -f UTF8 -t ASCII // TRANSLIT)\;
为什么不起作用?我的意思是当我有一个像'''这样的字符的文件时,它应该将它转换为'a'.
$ echo ????ó | iconv -f UTF8 -t ASCII//TRANSLIT
azzco
Run Code Online (Sandbox Code Playgroud)
为什么它在find -exec中不起作用?
$ find dir/ -type f -exec mv {} $(echo {} | iconv -f UTF8 -t ASCII//TRANSLIT ) \;
mv: `dir/zi?' and `dir/zi?' are the same file
Run Code Online (Sandbox Code Playgroud)
我使用xargs获得相同的结果:
$ find dir/ -type f | xargs -I{} echo {} | iconv -f UTF8 -t ASCII//TRANSLIT
dir/zia
Run Code Online (Sandbox Code Playgroud)
但:
$ find dir/ -type f …Run Code Online (Sandbox Code Playgroud) 有人可以教我或指导我如何安装libiconv for android?我一直在谷歌搜索3天,我找不到教程或操作方法.
我正在开发基于“简单 HTML DOM ”的脚本,我想在获取 URL 的内部文本后检测字符串的字符集,以使用iconv().
我尝试了很多东西,但没有一个能与Windows-1256.
我尝试过的:-
mb_detect_encoding($content)检测Windows-1256到UTF-8
mb_detect_encoding($content, "windows-1256")给出错误Illegal argument
function is_utf8($string) {
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $string);
}
Run Code Online (Sandbox Code Playgroud)
如果字符串不是 UTF-8,则此函数返回“0”,但当字符串为 UTF-8 时,它返回“找不到页面”。我不知道为什么!
我的代码是:
$html = file_get_html($url);
foreach($html->find('div[id=content]') as $element) …Run Code Online (Sandbox Code Playgroud) 目前我正在使用PayPal结账处理Rails应用程序.PayPal通过IPN消息与我的应用进行通信.
在许多情况下一切正常,但如果有人使用像德语变音符号(öüäß)这样的特殊字符,我会\xf6进入字符串.
如何将其转换为人类可读的字符'ö'?
如何将所有UTF-8字母替换为类似的拉丁字母,如ĖÈÉÊËĄČ等.例如,字符串的输出?ÈÉÊË??将EEEEEAC使用Javascript或Jquery?
此问题中描述的技术
如何使用javascript将特殊的UTF-8字符转换为iso-8859-1等效字符?将结果返回为UTF-8字节序列,因此结果encodeURIComponent("å")将等于%C3%A5,在我的情况下应该是a
问题可能与此重复.在JavaScript中的字符串中删除重音符号/变音符号,但该问题中提供的所有解决方案都是通过对所有可能的字符进行硬编码并将其映射到要替换的字符并且不是很干净解.