我在D2010下重新编译了旧的MP3 Id3标签阅读器,似乎再也找不到标签了。
代码非常简单,但它不起作用。 调试器显示大量零,然后在结果中出现chineese标志!
var dat:file of char;
id3:array [0..TAGLEN] of Char; //is 0..127 for ID3 v1
begin
vValid:=True;
if FileExists(vFilename) then begin
assignfile(dat,vFilename);
If (FileGetAttr(vFilename)>32) or (FileGetAttr(vFilename)=1) then
Filemode:= 0
Else
Filemode:= 2;
reset(dat);
seek(dat,FileSize(dat)-128);
blockread(dat,id3,128);
closefile(dat);
vMP3tag:=copy(id3, 0, 3);
if vMP3Tag='TAG' then begin
vTitle:=strip(copy(id3, 4, 30),' ');
vArtist:=strip(copy(id3, 34, 30), ' ');
我听说过关于Unicode和PansiChar的一些内容,但我仍然不太了解这些做了什么:)
感谢您寻找
答案 0 :(得分:2)
试试这个:
var dat:file of AnsiChar;
id3:array [0..TAGLEN] of AnsiChar; //is 0..127 for ID3 v1
当然,如果您的文件是基于ansi而不是基于unicode。我不知道mp3文件的id3标签中可能包含什么内容。
如果您想了解其中的差异,white paper向我解释了这一切。基本上,Unicode使用更多的内存空间来存储单个字符(比如ansi字符数量的4倍),但是它们允许使用ansi不提供的字符,例如中文和日文。只要阅读白皮书,那么一切都会清楚。
简而言之,Ansichar和Ansistring在D2009之前曾经是Delphi中的一个字符串。在那些日子里,你的应用程序将不兼容unicode(默认情况下你不能输入中文字符)。 从D2009开始,字符串的定义从ansistring变为widestring,ansichar变为widechar。这意味着默认情况下您的应用程序将是unicode。但是旧代码,期望字符串是ansicode,需要进行调整以反映这种变化。 你的代码说char,意思是ansichar到D2009之前的编译器,但是宽到D2009 +编译器。换句话说,新的编译器会以不同的方式读取您的代码。
我希望能够解释一下。
答案 1 :(得分:0)
喔!
似乎AnsiCHar而不是Char是D2010的方式。
ANSI-炭火他们-一切!