Попробуйте это:
var dat:file of AnsiChar;
id3:array [0..TAGLEN] of AnsiChar; //is 0..127 for ID3 v1
Это, конечно, если ваш файл основан на анси, а не на юникоде. Я понятия не имею, что может быть в теге id3 mp3-файла.
Если вы хотите понять разницу, эта белая бумага объяснила мне все это. В основном Unicode использует больше места в памяти для хранения одного символа (например, в 4 раза больше символа ANSI), но они допускают символы, такие как, например, китайский и японский, которые ANSI не предоставляет. Просто прочитайте официальный документ, и тогда все станет ясно.
Короче говоря, Ansichar и Ansistring - это то, что раньше было строкой в Delphi до D2009. В те дни ваше приложение не было совместимо с юникодом (вы не могли печатать китайские символы по умолчанию).
Начиная с D2009, определение строки изменилось с ANISRIST на широкую строку и ANSICHAR на WARCHAR. Это означает, что ваше приложение будет по умолчанию unicode. Но старый код, ожидающий, что строки будут ансикодными, должен быть адаптирован для отражения этого изменения.
В вашем коде указано char, что означает ansichar для компиляторов до D2009, но widechar для компиляторов D2009 +. Другими словами, новые компиляторы читают ваш код по-другому.
Надеюсь, это немного объясняет.