我有一个包含波斯语单词的文本文件,该文件使用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数据库中的表中。我这样做,但每次我想从数据库表中搜索波斯语时,结果为null,而记录确实存在于数据库表中。 找到表格中存在的波斯语的解决方案是什么? 我目前使用的代码就像:
SELECT * FROM [dbo].[WordDirectory]
WHERE Word = N'کلمه'
'Word'是保存波斯语单词的字段。字段的类型是NVARCHAR。我的SQL服务器版本是2012。 我应该改变整理吗?
答案 0 :(得分:3)
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语句中搜索字符串时也是如此。
答案 1 :(得分:1)
在搜索过程中,你可能会遇到'ي'和'ك'的波斯语和阿拉伯语版本的问题。这些字符看起来都一样,有不同的Unicode编号:
select NCHAR(1740), -- Persian ى
NCHAR(1610), -- Arabic ي
NCHAR(1705), -- Persian ك
NCHAR(1603) -- Arabic ك