问题描述
在我的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