logo资料库

如何将一个ansi的文本文件转为unicode格式.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
如何将一个 ansi 的文本文件转为 unicode 格式 procedure var TGBUCS.GB_USC2 (var ascString : string); integer; : WideString; ascString; : : := char; ascLen,i tu c begin tu SetLength ascLen := CopyMemory for := begin c ascString[i ascString[i := i * 2); (ascString,Length (tu) (ascString); Length (@ascString[1],@tu[1],ascLen); 1 ascLen div to 2 do ascString[i 2 2] * * - := 1]; ascString[i * 2]; * - := 2 1] c; end; end; Top AnsiToUTF8 UTF8ToUnicode 看一下这两个函数的帮助。 还有这个,可能这个更符合你的要求: StringToWideChar 你可以用一个 TStringList 将文本文件 Load 进来,然后声明一个 WideString 变量,最后调 用上面的 StringToWideChar,转换后的信息保存在 WideString 中。 再声明一个 MemoryStream 将 WideString 写进流中。 最后将流保存为一个文本文件。 你去文件文件看,它就是 Unicode 编码的,且信息一样。 这就是在程序中的方法,信不信由你! 以前我也为 ansi 和 unicode 的转换,看遍了这些函数,其实最简单的方法 就是 Ansi->Unicode strUnicode := WideString(strAnsi); Unicode->Ansi strAnsi := AnsiString(strUnicode);
谢谢你的回复,我按你的方法做, 发现如果 a.txt 中都是英文字符的话就都没问题。 如果中间有中文字符,结果就不对了。 我之前是用 filestream 来读写,结果也跟这一样。 procedure var TForm1.Button1Click(Sender: TObject); a:tstringlist; b:TMemoryStream; stransi:string; strunicode:widestring; begin ; ; a:=tstringlist.Create a.LoadFromFile('c:\a.txt'); stransi:=a.Text a.Free; strunicode:=widestring(stransi); b:=TMemoryStream.Create ; b.Write(strunicode[1],length(strunicode)*2); b.SaveToFile('c:\b.txt'); b.Free; end; Top 好吧,让我来解析为什么吧,那是因为每一种格式的文本在最开头都会有一个标识,标 识它是什么编码。比如 Unicode 的最开头就是 FFFE。笔记本就是根据最开头的这个标识来 识别它是什么码的。 而你在上面写的时候,没有将这个标识写在文件的最开头,所以你用笔记本打开的时候识 别不了,不信你打开之后选另存为,就可以看到它识别为 Ansi 码了,所以会显示不对。 正确的做法是在文件的开头写进 FFFE 这个标识,就可以正确显示了。 下面是源码: var SL: TStringList; TMemoryStream; String; MM: AnStr: WS: WideString; P: PByteArray; begin SL:= MM:= try TStringList.Create; TMemoryStream.Create; SL.LoadFromFile('test.txt');
AnStr:= WS:= SL.Text; AnStr; //转为 Unicode * 2 //文本开头写进 Unicode 的标识 GetMem(P, $FF; P[0]:= $FE; P[1]:= MM.Write(P^, Sizeof(Char)); 2 * Sizeof(Char)); //将 Unicode 文本写进流中保存。 MM.Write(PWideChar(WS)^, MM.SaveToFile('test2.txt'); Length(WS) * Sizeof(WideChar)); FreeMem(P); finally SL.Free; MM.Free; end; end; 我先在一个笔记本中写下:“yes 是的,这是 Unicode”,然后保存为 Test 文件。这个时候 它是 Ansi 编码。 执行我上面的代码之后,文本保存为 Test2,这时它就是 Unicode 码了,可以正确显示, 你可选另存为看看它是不是 Unicode 编码。
分享到:
收藏