PHP函数iconv(),mb_convert_encoding()可以';t将KOI8-R转换为CP1251

PHP函数iconv(),mb_convert_encoding()可以';t将KOI8-R转换为CP1251,php,iconv,Php,Iconv,在使用Windows应用程序将数据从Cronos数据库导出到TXT文件后,我遇到了一个问题—无法在Linux服务器上正确查看导出的数据(在Windows上查看是可以的) 以下是一个例子: ццП||ӘПӘӘПӘӘӘМӘӘӘӘӘӘӘӘӘ 我尝试使用PHP将其转换,因为以后需要将其转换为一个巨大的SQL文件 Charset decoding services告诉我,这个文本应该从KOI8-R转换为CP1251,所以我尝试使用iconv()和mb_convert_encoding()进行转换 那么,让

在使用Windows应用程序将数据从Cronos数据库导出到TXT文件后,我遇到了一个问题—无法在Linux服务器上正确查看导出的数据(在Windows上查看是可以的)

以下是一个例子:

ццП||ӘПӘӘПӘӘӘМӘӘӘӘӘӘӘӘӘ

我尝试使用PHP将其转换,因为以后需要将其转换为一个巨大的SQL文件

Charset decoding services告诉我,这个文本应该从KOI8-R转换为CP1251,所以我尝试使用iconv()和mb_convert_encoding()进行转换

那么,让我们试试这个:

$string=iconv('KOI8-R','CP1251',$string)

结果是:
注意:iconv():在输入字符串中检测到非法字符

我在谷歌上搜索//忽略并重试:
$string=iconv('KOI8-R','CP1251//IGNORE',$string)

结果是: 同一字符串-
ццП||ӘПӘӘПӘӘӘМӘӘӘӘӘӘӘӘӘӘӘӘ124

然后是mb_convert_编码,没有“from encoding”参数: $string=mb_convert_编码($string,'CP1251')

结果是:

。。。和“来自编码”:
ццП||ӘПӘӘПӘӘӘМӘӘӘӘӘӘӘӘӘ

然后是镜像尝试(cp1251到koi8-r)。使用iconv()我得到“在输入字符串中检测到非法字符”;mb_convert_编码给了我一些新的东西:

尝试将其转换为UTF-8时显示了许多不同的符号

我还想使用Notepad++转换此文件,但它不允许我打开2.5GB txt文件:(

我还尝试使用iconv作为二进制文件-同样的错误

我需要的就是把它转换成可读的俄文符号。最好的方法是把它转换成UTF-8,但我不知道怎么做

Linux node03 4.4.0-142-generic\168 Ubuntu SMP Wed Jan 16 21:00:45 UTC 2019 x86\u 64 x86\u 64 x86\u 64 GNU/Linux
iconv(ubuntuglibc2.23-0ubuntu11)2.23

Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.33-0ubuntu0.16.04.2, Copyright (c) 1999-2017, by Zend Technologies```

将CP1252与西里尔字母一起使用不是一个好主意。请使用UTF-8

PHP还可以在内部处理字符集!=UTF-8的字符串。 试图在带有UTF-8标头的页面上输出这些字符串将导致不正确的输出。 十六进制表示法可以在UTF-8页面上显示此类字符串,也可以在编辑器中的UTF-8下写入。 函数strToHex2()提供了这样一个字符串

//Returns a string with escaped chars in hexadecimal notation
function strToHex2($str) {
   return '\x'.rtrim (chunk_split(strtoupper(bin2hex($str)), 2,'\x'),'\x'); 
}
以下几行显示Iconv执行从KOI8-R到UTF8的转换(反之亦然):

$cityUTF8=“Га|||”;
//转换为KOI8-R
$cityKOI8=iconv('UTF-8','KOI8-R',$cityUTF8);
echo“KOI8:.strothex2($cityKOI8)。”
“; //KOI8:\xE7\xCF\xD2\xCF\xC4\x7C\x7C\x7C //比照https://en.wikipedia.org/wiki/KOI8-R //从KOI8转换回UTF-8进行检查 $cityUTF8Back=iconv('KOI8-R','UTF-8',$cityKOI8); //检查是否相等 var_dump($cityUTF8==$cityUTF8Back);//bool(true)
将CP1252与西里尔字母一起使用不是一个好主意。请使用UTF-8

PHP还可以在内部处理字符集!=UTF-8的字符串。 试图在带有UTF-8标头的页面上输出这些字符串将导致不正确的输出。 十六进制表示法可以在UTF-8页面上显示此类字符串,也可以在编辑器中的UTF-8下写入。 函数strToHex2()提供了这样一个字符串

//Returns a string with escaped chars in hexadecimal notation
function strToHex2($str) {
   return '\x'.rtrim (chunk_split(strtoupper(bin2hex($str)), 2,'\x'),'\x'); 
}
以下几行显示Iconv执行从KOI8-R到UTF8的转换(反之亦然):

$cityUTF8=“Га|||”;
//转换为KOI8-R
$cityKOI8=iconv('UTF-8','KOI8-R',$cityUTF8);
echo“KOI8:.strothex2($cityKOI8)。”
“; //KOI8:\xE7\xCF\xD2\xCF\xC4\x7C\x7C\x7C //比照https://en.wikipedia.org/wiki/KOI8-R //从KOI8转换回UTF-8进行检查 $cityUTF8Back=iconv('KOI8-R','UTF-8',$cityKOI8); //检查是否相等 var_dump($cityUTF8==$cityUTF8Back);//bool(true)
源代码编码不是KOI8-R,而是CP1251


我使用iconv将文件从CP1251转换为UTF-8,这很有帮助。

源代码不是KOI8-R,而是CP1251


我使用iconv将文件从CP1251转换为UTF-8,这很有帮助。

我怀疑您的源字符串不是KOI8或受污染的。使用此函数将字符串显示为十六进制字符串。函数strothex2($str){return'\x'.rtrim(chunk_split(strtoupper(bin2hex($str)),2'\x'),'\x');}
\xD1\xE8\xF1\xF2\xE5\xEC\xED\xFB\xE9\x20\xED\xEE\xEC\xE5\xF0\x7C\x7C…
我该怎么办呢?这个$string=“\xD1\xE8\xF1\xF2\xE5\xEC\xex\xFB\xE9\x20\xEE\xEE\xEC\xEC\xE5\xF0\xfc\xfc\x7C”只是另一种不用伪造来编写源字符串的方法。使用$string=NVICOX7('UTI8-X7R','"яХЯРЕЛМШИ МНЛЕП|||"结果。这是正确的文本吗?我只是复制了完整的字符串,主题中的字符串只是一个剪切的示例。不,它仍然是一个错误的文本应该是这样的:
С||||||||||||||||||||||||||||||||||||||||||||函数将字符串显示为十六进制字符串。函数strothex2($str){return'\x'.rtrim(chunk_split(strtoupper(bin2hex($str)),2'\x'),'\x');}
\xD1\xE8\xF1\xF2\xE5\xEC\xED\xFB\xE9\x20\xEE\xEC\xEC\xE5\xF0\x7C\x7C\x7C…
我应该如何处理此$string=“\xD1\xE8\xF1\xF2\xE5\xEC\xED\xFB\xE9\x20\xe\xEE\xEC\xE5\xF0\x7C\x7C\x7C\x7C\x7C”只是编写源字符串而不进行篡改的另一种方式。使用$string=iconv('KOI8-R','UTF-8',$string),我得到了“ЯЯЯЯЯЯЯЯЯЯЯ1071|||“因此,这是正确的文本吗?我只是复制了完整的字符串,一个主题中的字符串只是一个剪切的示例。不,它仍然是一个错误的文本应该是这样的:
Сカカカカカカカカカカカカカカカカカカ?カカカカカカカ?カカカカ