Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Zeichensatz/encoding ermitteln ?

Empfohlene Antworten

Veröffentlicht

hi,

gibt es eine Möglichkeit, Zeichensatz und/oder Zeichencodierung eines Strings zu ermitteln ?

ich habe eine Datei, die ich je nachdem was ich mache lesen kann, und dann doch wieder nur zeichenwust herausbekomme...daher vermute ich es liegt an der Zeichencodierung....doch niemand kann sagen welche das ist.

danke

Kannst Du vielleicht noch eine Programmiersprache zum Thread geben.

Allgemein kenne ich keine Möglichkeit um aus einer Variable den Zeichensatz zu ermitteln, jedoch lässt sich meist am Filesystem oder Betriebssystem abschätzen um welchen Zeichensatz es sich handeln könnte.

Bei Windows wird dein Zeichensatz wohl ISO-8859-1, CP1250 oder CP1251 sein.

Bei Linux gib auf der Konsole einfach folgendes ein: locale charmap

Nun siehst Du welchen Zeichensatz Deine Konsole verwendet. Wird z.B. ein Perl Script auf der Konsole ausgeführt, schreibt es auch mit diesem Zeichensatz Dateien auf die Platte.

!!! Achtung !!!

Wenn Du eine Konsole under X11 oder eine IDE wie Eclipse einsetzt verwendet das Script den Zeichensatz, den die Konsole / IDE vorgiebt. Erstellst Du z.B. ein File mit der IDE und willst es mit der Konsole weiter bearbeiten gibt das öfters ekelhafte Fehler.

Greez,

PhOeniX

*sich schämend in die ecke stellt*

PHP4

es geht um eine CSV Datei die mit Excel und bestimmten anderen Programmen lesbar ist, aber mit PHP ausgelesen, oder wieder anderen Editoren, kommt nur zeichenwust.

Werden nur Umlaute und Sonderzeichen als "Zeichenwust" dargestellt, oder der gesamte String?

Falls nur Erstere, tippe ich auf das alte DOS-Format (OEM, CP850), das so konvertiert werden kann:


$str = "das ist ein t„st";
echo $str."<hr>";
echo iconv("CP850","ISO_8859-15",$str);
[/PHP]

Alternativ kannst Du auch mit dem Kommandozeilen-Tool "iconv" Tests machen.

Eine Liste der untestützten Character-Sets bekommst Du mit "iconv -l".

Vorraussetzung für PHP ist:

Es muss iconv() in der Standard-C Bibliothek vorhanden sein oder libiconv auf Ihrem System installiert sein. Die libiconv-Bibliothek ist verfügbar über http://www.gnu.org/software/libiconv/.

Edit:

Du könntest ja mal einen Beispiel-String posten...

der gesamte String verwandelte sich in chinesische oder japanische Zeichen...irgendetwas in die richtung

wenn ich ein Beispiel generieren könnte, wäre ich wohl nahe an der Lösung ^^

die orginal-Daten darf ich nicht zeigen :(

kann ich vielleicht Zeichensätze als array irgendwo abfragen und sie dann einfach alle mal durchgehen ? ^^

kann ich vielleicht Zeichensätze als array irgendwo abfragen und sie dann einfach alle mal durchgehen ? ^^

Klar, kannst Dir ja mit "iconv -l" ne Liste der unterstützen Zeichensätze ausgeben lassen, und daraus ein Array machen...

Dann kannste ja für jeden Wert ($strVal) ein:


$strRes = iconv($strVal,"ISO_8859-15",$strSrc); 

machen, und Dir mal zu jedem Charecter-Set eine Zeile konvertieren und anzeigen lassen...

Vielleicht ist ja was lesbares dabei ;)

Von welchem Betriebssystem + Anwendung / Programmiersprache wurde das File denn erzeugt?

Sieht sieht die Datei normal aus wenn Du Sie mit einem Editor z.B. vi oder notepad öffnest?

Windows Editor und Excel z.B. können sie öffnen.

Eine betrachtung des hex-Codes hat gezeigt, das es wohl ein 2byte Zeichensatz ist.

könnte es sein das der PHP-Befehl iconv nichts mit den Strings anfangen kann, die iconf -l ausgibt ? ich bekomme bei keinem der dortigen zeichensätze irgend eine Rückgabe

*script nochmal checkt*

Also bei mir funktioniert das hier:


<?php
$strTest = '„¢@䢣@…‰•@â€¦â€°â€¢â€ ÂÆ’ˆ…™@£…¢£KKK';

$strBinIconv = '/usr/bin/iconv';
$resPipe = popen($strBinIconv.' -l','r');
if ($resPipe) {
$strRes = '';
while ($resPipe && !feof($resPipe)) {
$strRes .= fgets($resPipe);
}
pclose($resPipe);
}
$arrCharsets = explode("\n",$strRes);
if (is_Array($arrCharsets)) {
foreach ($arrCharsets as $strKey=>$strVal) {
$strCurrCSet = str_replace('//','',trim($strVal));
//Try to find a readable string...
$strTmpRes = @iconv($strCurrCSet,"ISO_8859-15",$strTest);
if (preg_match('/[a-z0-9äöü]{5,}/is',$strTmpRes)) {
//We possibly have some readable (min 5) characters here...
echo 'Maybe readable using conversion from \''.$strCurrCSet.'\' to \'ISO_8859-15\':<br>';
echo $strTmpRes;
echo '<hr>';
}
}
}
?>
[/PHP]

dein beispiel hat wunderbar geholfen.

die // am Ende des Zeichensatz-Namens waren das Problem.

Problem gelöst. zeichensatz gefunden. Ich danke vielmals

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.