如何检索错误的字符集编码的字符串?

问题描述

在我的PHP脚本中,我使用以下代码与MS sql数据库服务器建立了连接,

$connectionInfo = array( "Database"=>$database,"UID"=>$uid,"PWD"=>$pwd);
$conn = sqlsrv_connect( $serverName,$connectionInfo);

我确实忘记了在"CharacterSet"=>"UTF-8"中指定$connectionInfo。由于这个原因,某些西班牙语和其他字符的编码错误。例如,“álgebra”存储为“Ãlgebra”。既然我已经在连接数据库的过程中设置了正确的字符集,那么就可以正确存储新数据。 但是如何恢复编码错误并已存储的原始字符串?

解决方法

您很可能没有丢失任何东西。只需将字符串/列转换为二进制,然后使用正确的编码从二进制转换为字符串。

df <- c("2020-01-02","2020-01-03","2020-01-05")
freq <- table (df)
dates <-  seq.Date(from = as.Date('2020-01-01'),to = as.Date('2020-01-08'),by = 'days') 
print (dates)
cbind (freq,df)
,

有时候我会使用这个小函数从UTF8进行转换,这可能会对您有所帮助:

create function FromUtf8(@src varchar(8000)) returns varchar(8000) as
begin
    declare @c char,@i int
    select @i = patIndex('%[ÂÃ][€-¿]%',@src collate Latin1_General_BIN)
    while @i > 0
        select  @c = char(((ascii(substring(@src,@i,1)) & 31) * 64)
                         + (ascii(substring(@src,@i + 1,1)) & 63)),@src = stuff(@src,2,@c),@i = patIndex('%[ÂÃ][€-¿]%',@src collate Latin1_General_BIN)
    return @src
end