Your message dated Fri, 19 Jun 2026 23:19:00 +0200
with message-id <[email protected]>
and subject line Re: Bug#232307: id3v2: [PATCH] Support UTF8 and UTF16 encodings
has caused the Debian Bug report #232307,
regarding id3v2: Doesn't allow setting unicode flags for text fields
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
232307: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=232307
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: id3v2
Version: 0.1.9-1
Severity: minor

As my whole system is now UTF-8 aware, I have also re-tagged all my
mp3s and oggs. As oggs are currently using UTF-8 by default, I have a
problem with mp3 - apparently, no mp3-tagger for linux has implemented
setting the encoding flags of the text field - they are all marked as
latin1. Of course, I didn't notice this until I have read the
specification :(

So this is a wish for upstream to implement this feature, possibly
both setting and getting the encoding of a particular frame (without
the recoding of the frame) to be able to write scripts for automagical
tagging. 

-- System Information:
Found unknown policy: ('500', 'sherpya')Debian Release: Nikolai Prokoschenko 
Special
  APT prefers experimental
  APT policy: (990, 'experimental'), (500, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 2.6.2-1-k7
Locale: LANG=ru_RU.UTF-8, LC_CTYPE=ru_RU.UTF-8

Versions of packages id3v2 depends on:
ii  libc6                      2.3.2.ds1-11  GNU C Library: Shared libraries an
ii  libgcc1                    1:3.3.3-0pre3 GCC support library
ii  libid3-3.8.3               3.8.3-3       Library for manipulating ID3v1 and
ii  libstdc++5                 1:3.3.3-0pre3 The GNU Standard C++ Library v3
ii  zlib1g                     1:1.2.1-4     compression library - runtime

-- no debconf information



--- End Message ---
--- Begin Message ---
Writing real Unicode tags now works: non-Latin-1 text is stored as
UTF-16 automatically with the correct encoding marker, and reading
returns it in the locale encoding. An explicit encoding selector such as
the proposed -u (UTF-8, text-encoding type 3) is intentionally not
added: UTF-8 and UTF-16BE are ID3v2.4 encodings, while id3v2/id3lib
writes ID3v2.3.0. For explicit-encoding or ID3v2.4 needs, use mid3v2(1).
I'm closing this bug report.

Martin

On Fri, Jul 08, 2005 at 17:22:06 +0200, Tobias Diedrich wrote:

> Package: id3v2
> Version: 0.1.11-1.1
> Followup-For: Bug #232307
> 
> 
> The attached patch adds two new options to id3v2, '-u' will set
> the string encoding to UTF16BE (id3v2 text encoding type 2), '-U'
> will set the string encoding to UTF8 (id3v2 text encoding type 3).
> 
> Note that with only this patch by itself the two new options
> won't work as id3lib is quite broken in this regard.
> 
> But at least it shouldn't break the existing behaviour and in
> combination with an id3lib patch I'm currently preparing for
> submission will allow real unicode tags to be written.
> 
> A basically working preview version of the id3lib patch is at
> http://ranmachan.dyndns.org/~ranma/id3lib.unicode.20050708.patch
> 
> With it id3lib treats the strings as being in locale encoding by
> default and will convert them to either iso-8859-1, utf-16 or utf-8
> depending on which encoding is selected as desired by id3v2.
> 
> The reading function is also patched and will return the output in
> locale encoding after the above patch.
> 
> -- System Information:
> Debian Release: testing/unstable
>   APT prefers unstable
>   APT policy: (990, 'unstable'), (500, 'hoary')
> Architecture: i386 (i686)
> Shell:  /bin/sh linked to /bin/bash
> Kernel: Linux 2.6.11.12-ac7-vs1.9.5-htbatm-imq
> Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
> 
> Versions of packages id3v2 depends on:
> ii  libc6                       2.3.2.ds1-22 GNU C Library: Shared libraries 
> an
> ii  libgcc1                     1:4.0.0-9    GCC support library
> ii  libid3-3.8.3                3.8.3-4.2    Library for manipulating ID3v1 
> and
> ii  libstdc++5                  1:3.3.6-6    The GNU Standard C++ Library v3
> ii  zlib1g                      1:1.2.2-4    compression library - runtime
> 
> id3v2 recommends no packages.
> 
> -- no debconf information

> diff -Naru id3v2-0.1.11/id3v2.1 id3v2-0.1.11.patched/id3v2.1
> --- id3v2-0.1.11/id3v2.1      2002-02-14 20:35:31.000000000 +0100
> +++ id3v2-0.1.11.patched/id3v2.1      2005-07-08 17:02:13.000000000 +0200
> @@ -44,6 +44,12 @@
>  .B \-C, \-\-convert
>   Converts id3v1 tag to id3v2
>  .TP
> +.B \-u, \-\-utf16
> +Use UTF16 encoding instead of iso-8859-1
> +.TP
> +.B \-U, \-\-utf8
> +Use UTF8 encoding instead of iso-8859-1
> +.TP
>  .B \-a, \-\-artist ARTIST
>  Set the artist information
>  .TP
> diff -Naru id3v2-0.1.11/id3v2.cpp id3v2-0.1.11.patched/id3v2.cpp
> --- id3v2-0.1.11/id3v2.cpp    2005-07-07 22:22:10.000000000 +0200
> +++ id3v2-0.1.11.patched/id3v2.cpp    2005-07-08 17:05:05.000000000 +0200
> @@ -40,6 +40,8 @@
>    std::cout << "  -s,  --delete-v1          Deletes id3v1 tags" << std::endl;
>    std::cout << "  -D,  --delete-all         Deletes both id3v1 and id3v2 
> tags" << std::endl;
>    std::cout << "  -C,  --convert            Converts id3v1 tag to id3v2" << 
> std::endl;
> +  std::cout << "  -u,  --utf16              Use UTF-16 encoding instead of 
> iso-8859-1" << std::endl;
> +  std::cout << "  -U,  --utf8               Use UTF-8 encoding instead of 
> iso-8859-1" << std::endl;
>    std::cout << "  -1,  --id3v1-only         Writes only id3v1 tag" << 
> std::endl;
>    std::cout << "  -2,  --id3v2-only         Writes only id3v2 tag" << 
> std::endl;
>    std::cout << "  -a,  --artist  \"ARTIST\"   Set the artist information" << 
> std::endl;
> @@ -87,6 +89,7 @@
>    int iOpt;
>    int argCounter = 0;
>    int ii;
> +  int id3te = ID3TE_ISO8859_1;
>    char tmp[TMPSIZE];
>    FILE * fp;
>    
> @@ -124,6 +127,8 @@
>        { "convert", no_argument,       &iLongOpt, 'C' },
>        { "id3v1-only", no_argument,       &iLongOpt, '1' },
>        { "id3v2-only", no_argument,       &iLongOpt, '2' },
> +      { "utf16",   no_argument,       &iLongOpt, 'u' },
> +      { "utf8",    no_argument,       &iLongOpt, 'U' },
>  
>      // infomation to tag
>        { "artist",  required_argument, &iLongOpt, 'a' },
> @@ -209,7 +214,7 @@
>        { "WXXX",    required_argument, &optFrameID, ID3FID_WWWUSER },
>        { 0, 0, 0, 0 }
>      };
> -    iOpt = getopt_long (argc, argv, "12hfLvlRdsDCa:A:t:c:g:y:T:",
> +    iOpt = getopt_long (argc, argv, "12hfLvlRdsuUDCa:A:t:c:g:y:T:",
>                          long_options, &option_index);
>  
>      if (iOpt == -1  && argCounter == 0)
> @@ -240,6 +245,8 @@
>        case 'f': PrintFrameHelp(argv[0]);exit (0);
>        case 'L': PrintGenreList();       exit (0);
>        case 'v': PrintVersion(argv[0]);  exit (0);
> +      case 'u': id3te = ID3TE_UTF16BE; break;
> +      case 'U': id3te = ID3TE_UTF8; break;
>  
>      // listing / remove / convert -- see list.cpp and convert.cpp
>        case 'l': ListTag(argc, argv, optind, 0);    
> @@ -415,6 +422,7 @@
>            }
>            if (strlen(frameList[ii].data) > 0) {
>              myFrame->Field(ID3FN_TEXT) = frameList[ii].data;
> +            myFrame->Field(ID3FN_TEXTENC) = id3te;
>              myTag.AttachFrame(myFrame);
>            }
>            break;
> @@ -462,11 +470,13 @@
>            if (text == NULL) 
>            {
>              myFrame->Field(ID3FN_TEXT) = frameList[ii].data;
> +            myFrame->Field(ID3FN_TEXTENC) = id3te;
>            } else {
>              *text = '\0';
>              text++;
>              myFrame->Field(ID3FN_DESCRIPTION) = frameList[ii].data;
>              myFrame->Field(ID3FN_TEXT) = text;
> +            myFrame->Field(ID3FN_TEXTENC) = id3te;
>            }
>            if (strlen(ID3_GetString(myFrame, ID3FN_TEXT)) > 0) {
>              myTag.AttachFrame(myFrame);
> @@ -484,6 +494,7 @@
>            if (text == NULL) 
>            {
>              myFrame->Field(ID3FN_TEXT) = frameList[ii].data;
> +            myFrame->Field(ID3FN_TEXTENC) = id3te;
>            } else {
>               *text = '\0';
>               text++;
> @@ -493,11 +504,13 @@
>               {
>                 myFrame->Field(ID3FN_DESCRIPTION) = frameList[ii].data;
>                 myFrame->Field(ID3FN_TEXT) = text;
> +               myFrame->Field(ID3FN_TEXTENC) = id3te;
>               } else {
>                 *lang = '\0';
>                 lang++;
>                 myFrame->Field(ID3FN_DESCRIPTION) = frameList[ii].data;
>                myFrame->Field(ID3FN_TEXT) = text;
> +              myFrame->Field(ID3FN_TEXTENC) = id3te;
>                myFrame->Field(ID3FN_LANGUAGE) = lang;
>              }
>            }

--- End Message ---

Reply via email to