How to convert ID3v2 from Unicode to a system code page?

I have a Garmin and this thing won't read UTF8/16 in ID3v2, but can read my system's code page (CP1251).

I need a way to convert ID3v2 form UTF8/16 to CP1251 in many mp3 files. Obviously mp3tag can't do that.

You can use Winamp, when you open the tag editor you will see two tabs, for id3v1 and id3v2. Then you can copy the information from id3v2 to id3v1, the system code page will be used.
However, I would prefer MusicBee for mass tagging. It will read all available tags (id3v2 preferred), so you will see the id3v2 data. Then you can choose the write method (in Preferences -> Tags) as either id3v1 or id3v2+id3v1. Simply select all your mp3's and press 'Save changes' icon in tag editor. That's all.
Enjoy :slight_smile:

Are you saying MusicBee can read ID3v2 tags in UTF8/16 and save them in system code page?

Just FYI: Writing ID3v2 in system codepage results in an invalid tag which does not conform to the specification anymore (which is why this is not supported by Mp3tag).

You talking nonsense. Why there is ISO-8859-1 code page in options then?
I think it's unfair to support just that one particular code page. MP3tag ID3v2 code page should be configurable. That's mainly because there are hardware players that doesn't support unicode, but do support some code page.

ISO-8859-1 is not your system codepage. If you think that's nonsense, go and read the specification.

"I think it's unfair" that some players only read tags written in the system codepage, thus, breaking the standard and assume that everyone else also jumps on the bandwagon.

It's not MY codepage but it's a codepage nontheless. It's a codepage only for western languages. It's not better than any other codepage. I want my codepage in ID3v2, and i don't give a damn about that specification you speak. It's technically possible to use any encoding in ID3v2. It won't be universal like unicode, but who gives a damn if it'll only be used in my hardware player.

I ask you politely to calm down. The fact that your player does not conform do the specification is neither your or Mp3tag's fault.

Writing ID3v2 tags in system codepages different from ISO-8859-1 is not possible with Mp3tag and won't be added. If you need it, please use a different program to tag your files and make sure you tell the vendor of your hardware player to actually support ID3v2 in the next version of their firmware -- and not only some broken interpretation of the standard.

Sorry, but you didn't add any useful information to the thread. It was like a waste of space & time - nothing helping to solve the problem, instead arguing that this can't be done, and being a smarty-pants.


  1. Go to
  2. Read chapter 4. ID3v2 frame overview

and read this:

If nothing else is said, strings, including numeric strings and URLs
   [URL], are represented as ISO-8859-1 [ISO-8859-1] characters in the
   range $20 - $FF. Such strings are represented in frame descriptions
   as <text string>, or <full text string> if newlines are allowed. If
   nothing else is said newline character is forbidden. In ISO-8859-1 a
   newline is represented, when allowed, with $0A only.
   Frames that allow different types of text encoding contains a text
   encoding description byte. Possible encodings:
     $00   ISO-8859-1 [ISO-8859-1]. Terminated with $00.
     $01   UTF-16 [UTF-16] encoded Unicode [UNICODE] with BOM. All
           strings in the same frame SHALL have the same byteorder.
           Terminated with $00 00.
     $02   UTF-16BE [UTF-16] encoded Unicode [UNICODE] without BOM.
           Terminated with $00 00.
     $03   UTF-8 [UTF-8] encoded Unicode [UNICODE]. Terminated with $00.
   Strings dependent on encoding are represented in frame descriptions
   as <text string according to encoding>, or <full text string
   according to encoding> if newlines are allowed. Any empty strings of
   type $01 which are NULL-terminated may have the Unicode BOM followed
   by a Unicode NULL ($FF FE 00 00 or $FE FF 00 00).

So no other encodings as above are allowed. The best would be only to use A-Z and 0-9 from ISO-8859-1. So you shouldn't have any troubles.

Sorry, I misread your request. Actually, MusicBee can read your ID3v2 tags (UTF8/16, according to the specification) and store them as ID3v1 in your system code page, which is actually a violation of specification, but Foobar200, Winamp and others SW players can read them. Does your device read ID3v1 if the system codepage is used?

I make some app (on C#) to work with music files (mp3 almost). I used MediaInfo. But It has problems with some tags. I have many files with russian text in tags, and some of them display correctly, but some are not (I suppose CP 1251). The developer of MediaInfo sad, that wrong tags use not specificated code pages and they will not be supported (only utf-8). But I install your program and found, that problem files are shown correctly in Mp3Tag. Can you explain this? Can I get some code or advice on how to show tags correctly?

Also I found TagLip Sharp (it seems a port of TagLib) and tried it, but it read tags incorrectly too.