2010-12-14 118 views
2

Je table de base de données:essayant de décoder les données (exportation Abs à MySQL)

DROP TABLE translation_en_lt; 
CREATE TABLE translation_en_lt (
    id INTEGER, 
    lt_translation WIDEMEMO BLOBBlockSize 102400 BLOBCompressionAlgorithm ZLIB BLOBCompressionMode 9 
); 

Ce qui a été généré en utilisant AbsManager (gestionnaire de base de données absolue, Delphi). Il semble être obsolète cependant, et la syntaxe est invalide pour MySQL actuel. Ensuite, je dois cette entrée de données:

INSERT INTO translation_en_lt (lt_translation) values (MimeToBin('cABhAHMAaQBzAGw=')); 

La valeur de cette ligne, comme affiché correctement dans le AbsManager, est pasislinkti. Toutefois, base64_decode('cABhAHMAaQBzAGw=') renvoie p�a�s�i�s�l [base64_encode('pasislinkti') renvoie cGFzaXNsaW5rdGk=].

Comment puis-je obtenir 'pasislinkti' de MimeToBin('cABhAHMAaQBzAGw=')? Cela a-t-il quelque chose à voir avec l'encodage, zlib (WIDEMEMO BLOBBlockSize 102400 BLOBCompressionAlgorithm ZLIB BLOBCompressionMode 9)?

j'ai eu un commentaire disant:

14:24 VoVo64: guy: regarde comme si les données codées en base64 est en fait UCS-2 little endian. décodage cABhAHMAaQBzAGw = aux résultats HEX à 70 00 61 00 73 00 69 00 73 00 6c

Mais je l'ai déjà essayé iconv('UTF-16', 'UTF-8', base64_decode('cABhAHMAaQBzAGw=')) qui a abouti à:

Notice: iconv(): Detected an incomplete multibyte character in input string in /var/www/ssl/pp.php on line 2 pasis 

J'ai aussi essayé: mb_convert_encoding($u, 'UCS-2LE', 'UTF-8'), mb_convert_encoding($u, 'UCS-2', 'UTF-8'); ni ne travaillait pas.

Répondre

3

Ce sont des chaînes Base64:

cABhAHMAaQBzAGw= -> pasisl 
cGFzaXNsaW5rdGk= -> pasislinkti 

Je pense que vos données sont tronquées quelque part. Vous devriez rechercher une fonction MimeToText() dans votre système de base de données. Je voudrais essayer de vider les données sur CSV et charger cela dans MySQL en utilisant LOAD DATA INFILE. Vous devrez probablement réécrire les schémas de la table à la main. Le BLOBBlockSize .... semble être pour la compression de ces données. Votre nouvelle table prendra un peu plus d'espace ou vous pouvez utiliser la fonction Compress() de MySQL.

Quelque chose comme cela devrait fonctionner:

CREATE TABLE translation_en_lt (
    id INTEGER, 
    lt_translation MEDIUMTEXT, 
    PRIMARY KEY (id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8