首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arabic_CI_AS to utf8 in C#

Arabic_CI_AS to utf8 in C#
EN

Stack Overflow用户
提问于 2017-10-21 10:53:47
回答 2查看 1.6K关注 0票数 1

我有一个DataBase in Server和集合Arabic_CI_AS,我需要将一些字符串数据与另一个带有Utf8字符集的Postgres数据库进行比较。此外,我还使用C#进行转换和比较。当字符串只包含一个单词(在这些情况下,我应该将'ي‘替换为'ی')时,这很容易做到,但是对于长字符串,特别是用ی(’ charachter有问题。

我做不到!我尝试一些建议的解决方案,例如:

代码语言:javascript
复制
var enc = Encoding.GetEncoding(1256);
byte[] encBytes = enc.GetBytes(customer.name);
customer.name = Encoding.UTF8.GetString(encBytes, 0, encBytes.Length);

或者:

代码语言:javascript
复制
SELECT cast (name as nvarchar) as NewName 
from Customer

但它们不起作用!有谁可以帮我?

输入和输出示例,请参阅右侧的工具提示:

EN

回答 2

Stack Overflow用户

发布于 2017-10-21 11:05:48

也许这可以帮助您动态地更改您的排序规则。

代码语言:javascript
复制
SELECT name  collate SQL_Latin1_General_CP1_CI_AS
from Customer

代码语言:javascript
复制
SELECT name  collate Persian_100_CI_AI
    from Customer

或者您可以在c#端尝试此方法。

代码语言:javascript
复制
string _Value=string.Empty;
byte[] enBuff= Encoding.GetEncoding("windows-1256").GetBytes(customer.name);
customer.name= Encoding.GetEncoding("windows-1252").GetString(enBuff);

你也可以选择另一种校对。您应该更改许多排序规则和编码编号,以获得想要的结果。

票数 0
EN

Stack Overflow用户

发布于 2017-10-21 14:39:24

Server不支持utf-8字符串。如果您必须处理非纯拉丁文的字符,强烈建议使用NVARCHAR而不是带有阿拉伯排序规则的VARCHAR

许多人认为,NVARCHARutf-16VARCHARutf-8。这不是真的!第二个是扩展的ASCII,在任何情况下都使用一个字节,而utf-8将用一个以上的字节对一些字符进行编码。

所以-最重要的问题是:为什么?

Server可以将字符串放入NVARCHAR变量,将其转换为字节链,并将其重新转换为前一个字符串:

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46862498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档