[ERROR] Locale Monetary Symbol Prints Wrongly on Windows : Cygwin

Yeo Kai Wei yeokaiwei@hotmail.com
Mon Mar 13 00:40:55 GMT 2023


Hi All,

May I ask if there's a bug with Cygwin and Windows currency?

This is the output from the code below.

Region: en_AU.utf-8 Currency symbol: $ International currency symbol: AUD
Region: en_CA.utf-8 Currency symbol: $ International currency symbol: CAD
Region: en_GB.utf-8 Currency symbol: £ International currency symbol: GBP
Region: en_US.utf-8 Currency symbol: $ International currency symbol: USD
Region: en_NZ.utf-8 Currency symbol: $ International currency symbol: NZD
Region: en_ZM.utf-8 Currency symbol: $ International currency symbol: 
NZD <---- ERROR

The correct answer should be "Region: en_ZM.utf-8 Currency symbol: K 
International currency symbol: ZMK"

Supposedly, the code works on Linux.

Is this an issue with Windows?

How can one solve this issue?


Thank you very much.


Kind Regards,

YEO Kai Wei


*CODE*

#include <locale.h>

#include <stdio.h>

#include <stdlib.h>

void main()
{
     setlocale(LC_ALL, "");

     char* regions[] = {"en_AU.utf-8",
         "en_CA.utf-8",
         "en_GB.utf-8",
         "en_US.utf-8",
         "en_NZ.utf-8",
         "en_ZM.utf-8",
         NULL};

     int i = 0;

     while (regions[i])
     {
         setlocale(LC_MONETARY, regions[i]);

         const struct lconv* loc = localeconv();

         printf("Region: %s Currency symbol: %s International currency 
symbol: %s\n", regions[i], loc->currency_symbol, loc->int_curr_symbol);

         i++;
     }
}


More information about the Cygwin mailing list