I recently moved from using ICU32 to ICU51. But now Mapping table (.ucm) is not getting loaded. I searched the net ant tried the fixes like making sure the path is correct and ends with backslash but still the mapping table is not getting loaded.
sprintf((CCharT *)icuDataDir,"C:\\mybuilds\\icu_data\\");
u_setDataDirectory((CCharT *)icuDataDir);
u_init(&test);
retval = ucnv_countAvailable();
for(count_converter = 0 ;count_converter<retval; count_converter++)
available_converters = ucnv_getAvailableName(count_converter);
value of test is U_ZERO_ERROR, retval is 230. But in list of available converters i can't see the name of mapping tables stored in "C:\mybuilds\icu_data\".
Using Process Monitor I found out that My application is trying to access C:\mybuilds\icu_data\icu51l\my-cinversion-table.cnv file but earlier it used to work with C:\mybuilds\icu_data\my-cinversion-table.ucm.
ICU_DATA need to be set to the directory containing .cnv file. *.ucm file need to be converted to .cnv file using the utility "makeconv.exe" shipped with icu library and placing these .cnv file inside the ICU_DATA folder ->icu51l solves the issue.
Process Monitor helped in finding the place where icu was looking for icu mapping table.