fusioninventory-agent icon indicating copy to clipboard operation
fusioninventory-agent copied to clipboard

Windows Inventory don't return correctly non-ascii characters

Open ncharles opened this issue 3 years ago • 27 comments

If there are Windows softwares with non-ascii characters, they show up as ??? ???? in the inventory

To reproduce, you may create dummy entries with cyrilic characters

$baseReg = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
$softwares = @(
     @{ Path = "${baseReg}\{90150000-001F-0403-1000-0000000FF1CE}"; Name = "Microsoft Office Proofing Tools 2013 – български"; Version = "15.0.4569.1506"}
)
for ($i=0; $i -lt $softwares.length; $i++) {
  $current = $softwares[$i]
  write-output "Adding dummy software $($current.Name)"
  New-Item -Path $current.Path -Force
  New-ItemProperty -Path $current.Path -Name "DisplayName" -Value $current.Name -Type "String"
  New-ItemProperty -Path $current.Path -Name "DisplayVersion" -Value $current.Version -Type "String"
}

esulting inventory will return <NAME>Microsoft Office Proofing Tools 2013 <C3><82><C2><96> ?????????</NAME>

I've tried to

  • force codepage to 65001 in fusioninventory.bat
  • remove encoding in encodeFromRegistry in file Agent/Tool/Win32.pm
  • change the perl version
  • agent version 2.4 and 2.6
  • add use feature 'unicode_strings'; all around the code

And i'm a bit stuck there... do you know what I could do ?

ncharles avatar Feb 02 '22 17:02 ncharles

Hello, I will try with your entries

ddurieux avatar Feb 02 '22 19:02 ddurieux

The problem is that we use the operating system for convert (source) to utf-8. I'm trying a method to identify the encoding of string, will require couple days before have answer

ddurieux avatar Feb 02 '22 21:02 ddurieux

I've been trying to remove the convertion without success Apparently TieRegistry only uses Ansi methods rather than Unicode (and it goes a long way of being like that https://www.perlmonks.org/?node_id=456194 )

ncharles avatar Feb 02 '22 21:02 ncharles

My idea is to detect the encoding with https://metacpan.org/pod/Encode::Detect::Detector, the complete string or perhaps for each character. Not sure it can works, but perhaps :D

ddurieux avatar Feb 02 '22 22:02 ddurieux

Hi, Is there anything I can do to help on this issue?

ncharles avatar Feb 14 '22 15:02 ncharles

Hi, I tried my idea and not fix the problem, but have part of interessing information. Need a little more time to find a solution ^_^

ddurieux avatar Feb 14 '22 20:02 ddurieux

Bon ça a l'air de venir de la récupération des données, car elles sont remplacées par des ??? directement. Le support des charsets est vraiment mal foutu dans Windows.

Je cherche des possibilités de contourner ces problèmes pour avoir des données fiables. Je te tiens au courant ;)

ddurieux avatar Mar 08 '22 23:03 ddurieux

Les charsets ne sont pas supportés par les méthodes sous-jacentes dans TieRegistry qui appellent Win32API::Registry en mode ANSI, donc les infos sont perdus à ce moment là

ncharles avatar Mar 22 '22 09:03 ncharles

Oui c'est ce que j'ai vu, donc la seule solution serait de changer de lib et pas mal de code :(

ddurieux avatar Mar 22 '22 09:03 ddurieux

Comment peut-on aider ?

ncharles avatar Mar 22 '22 09:03 ncharles

En première étape : identifier une lib perl qui permettrai d'interroger le registre sans altération de l'encodage.

ddurieux avatar Mar 22 '22 09:03 ddurieux

A priori, juste retirer la lib pour utiliser les methodes sous-jacentes devrait fonctionner

ncharles avatar Mar 22 '22 13:03 ncharles

Oui j'ai regardé ce matin, je vais faire un test avec la lib de bas niveau utilisé par tieregistry, Je te fait un retour ce soir certainement ;)

ddurieux avatar Mar 23 '22 08:03 ddurieux

J'ai pris quelques heures pour lire la doc et faire des tests. Il y a des avancées, j'arrive à récupérer la valeur; alors elle est encore encodée, je dois la décoder de la bonne façon (mais c'est toujours mieux que les ???? :p)

je continuerai vendredi mes tests.

ddurieux avatar Mar 23 '22 22:03 ddurieux

Merci à @peckpeck / Normation pour l'aide sur la problématique d'encodage. La correction est fonctionnelle, je dois modifier le code pour utiliser la nouvele fonction ;)

ddurieux avatar Apr 29 '22 07:04 ddurieux

Les modifications sont en cours dans toute la partie windows, ça devrait être prêt dans le courant de la semaine ;)

ddurieux avatar May 02 '22 09:05 ddurieux

Salut @ddurieux As-tu besoin d'aide pour avancer? Merci !

ncharles avatar Jun 27 '22 14:06 ncharles

j'ai pris du retard :( il me faudra tester quand ça sera prêt, car il risque d'y avoir des effets de bords (même si j'essaye de les corriger lors des modifications de code.

ddurieux avatar Jun 27 '22 18:06 ddurieux

@ddurieux comment peut on aider ? Si tu veux, on peut tester ce que tu as fait?

ncharles avatar Oct 03 '22 14:10 ncharles

Oui je veux bien pour les test, je prépare une archive ce week end afin que vous puissiez tester lundi ;)

ddurieux avatar Oct 05 '22 08:10 ddurieux

Bonjour @ddurieux,

As-tu une archive à nous transmettre afin que l'on puisse tester ?

fneyron avatar Nov 23 '22 08:11 fneyron

Bonjour @ddurieux je me permets de te relancer concernant l'archive, n'hésite pas à nous faire savoir si tu as besoin d'aide, nous serons ravis de pouvoir t'aider !

ElaadF avatar Jun 12 '23 14:06 ElaadF

Bonjour ! Est-ce qu'on peut aider pour résoudre ce ticket ?

ncharles avatar Aug 07 '23 14:08 ncharles

On peut se faire un point vocal discord demain à partir de 14h ?

ddurieux avatar Aug 07 '23 17:08 ddurieux

je peux te proposer 16h30 si ca te va

ncharles avatar Aug 07 '23 20:08 ncharles

ok parfait ;)

ddurieux avatar Aug 07 '23 20:08 ddurieux

Voici la PR : https://github.com/fusioninventory/fusioninventory-agent/pull/1047

Tu peux faire un test (génération d'un export local) avec la version actuelle et un test avec ces fichiers là (génération d'un export local) et comparer les 2 fichiers?

ddurieux avatar Aug 09 '23 07:08 ddurieux