2

我有一个包含波斯语单词并使用 ANSI 编码保存的文本文件。当我尝试从文本文件中读取波斯语单词时,我得到了一些字符,例如“?”。为了解决这个问题,我将文件编码更改为 UTF8 并重新编写了文本文件。以下是更改文件编码的方法:

    public void Convert2UTF8(string filePath)
    {
        //first, read the text file with "ANSI" endocing
        StreamReader fileStream = new StreamReader(filePath, Encoding.Default);
        string fileContent = fileStream.ReadToEnd();
        fileStream.Close();
        //Now change the file encoding and replace it with the UTF8
        StreamWriter utf8Writer = new StreamWriter(filePath.Replace(".txt", ".txt"), false, Encoding.UTF8);
        utf8Writer.Write(fileContent);
        utf8Writer.Close();
    }

现在第一个问题解决了;但是,这里还有另一个问题:每次我想从 SQL Server 数据库表中搜索一个波斯语单词时,结果为空,而该记录确实存在于数据库表中。

找到表中存在的波斯语单词的解决方案是什么?我目前使用的代码如下:

SELECT * FROM [dbo].[WordDirectory] 
WHERE Word = N'کلمه'

Word是保存波斯语单词的字段。字段的类型是NVARCHAR。我的 SQL Server 版本是 2012。我应该更改排序规则吗?

4

2 回答 2

4
DECLARE @Table TABLE(Field NVARCHAR(4000) COLLATE Frisian_100_CI_AI)

INSERT INTO @Table (Field) VALUES
(N'همهٔ افراد بش'),
(N'می‌آیند و حیثیت '),
(N'ميشه آهسته تر صحبت کنيد؟'),
(N'روح'),
(N' رفتار')   

SELECT * FROM @Table
WHERE Field LIKE N'%آهسته%'

两个查询返回相同的结果

RESULT Set:  ميشه آهسته تر صحبت کنيد؟

您必须确保在插入前缀的值时,N这就是告诉 sql server 在传递的字符串中可以有 unicode 字符。当您在 Select 语句中搜索它们的字符串时也是如此。

于 2014-02-22T17:21:57.760 回答
3

在搜索过程中,您可能对波斯语和阿拉伯语版本的 'ي' 和 'ك' 有疑问。这些字符甚至看起来都一样,具有不同的 Unicode 编号:

select NCHAR(1740),  -- Persian ى
       NCHAR(1610),  -- Arabic ي
       NCHAR(1705), -- Persian ك
       NCHAR(1603) -- Arabic ك

更多信息: http: //www.dotnettips.info/post/90

于 2014-02-22T21:32:34.920 回答