我有一个DataBase in Server和集合Arabic_CI_AS,我需要将一些字符串数据与另一个带有Utf8字符集的Postgres数据库进行比较。此外,我还使用C#进行转换和比较。当字符串只包含一个单词(在这些情况下,我应该将'ي‘替换为'ی')时,这很容易做到,但是对于长字符串,特别是用ی(’ charachter有问题。
我做不到!我尝试一些建议的解决方案,例如:
var enc = Encoding.GetEncoding(1256);
byte[] encBytes = enc.GetBytes(customer.name);
customer.name = Encoding.UTF8.GetString(encBytes, 0, encBytes.Length);或者:
SELECT cast (name as nvarchar) as NewName
from Customer但它们不起作用!有谁可以帮我?
输入和输出示例,请参阅右侧的工具提示:

发布于 2017-10-21 11:05:48
也许这可以帮助您动态地更改您的排序规则。
SELECT name collate SQL_Latin1_General_CP1_CI_AS
from Customer或
SELECT name collate Persian_100_CI_AI
from Customer或者您可以在c#端尝试此方法。
string _Value=string.Empty;
byte[] enBuff= Encoding.GetEncoding("windows-1256").GetBytes(customer.name);
customer.name= Encoding.GetEncoding("windows-1252").GetString(enBuff);你也可以选择另一种校对。您应该更改许多排序规则和编码编号,以获得想要的结果。
发布于 2017-10-21 14:39:24
Server不支持utf-8字符串。如果您必须处理非纯拉丁文的字符,强烈建议使用NVARCHAR而不是带有阿拉伯排序规则的VARCHAR。
许多人认为,NVARCHAR是utf-16,VARCHAR是utf-8。这不是真的!第二个是扩展的ASCII,在任何情况下都使用一个字节,而utf-8将用一个以上的字节对一些字符进行编码。
所以-最重要的问题是:为什么?
Server可以将字符串放入NVARCHAR变量,将其转换为字节链,并将其重新转换为前一个字符串:
DECLARE @str NVARCHAR(MAX)=N'(نماینده اراک)';
SELECT @str
,CAST(@str AS VARBINARY(MAX))
,CAST(CAST(@str AS VARBINARY(MAX)) AS NVARCHAR(MAX));)的问题是--很可能!--你的阿拉伯字母从右到左,而)是从左到右。我想将上面的查询结果粘贴到这个答案中,但没有设法将关闭的)粘贴到原来的位置.你试着编辑,删除,替换,但是你得到了其他的东西.有趣的是,但不是错误编码的问题,而是一个错误的编辑器.
无论如何,Server不是您的问题。必须将字符串从Server中读取为NVARCHAR。C#使用的是unicode字符串,而不是排序规则的1字节字符串。每一次转换都有机会破坏你的文字。
如果您的目标(或您向我们展示的工具提示)不能正确地显示字符串,它可能是完全可以的,但编辑器不是.
如果你把这样一个UTF-8字符串传回给Server,你就会一团糟.
唯一的地方,UTF-8是有意义的写入文件或通过小波段传送。如果一个文本包含很多普通的拉丁字符,并且只有几个奇怪的字母(比如ver (通常是XML、HTML) ),那么您可以使用它来节省相当多的磁盘空间或带。如果你发了一条远东短信,你甚至会发短信。其中一些字符需要3个甚至4个字节才能被编码。
在数据库和应用程序中,您应该坚持使用unicode。
https://stackoverflow.com/questions/46862498
复制相似问题