2016-04-13 11 views
1

Ich habe einen Ordner mit dem Namen Folderć, der smt.jpg enthält. Da der Ordner den Buchstaben ć enthält, wird der Dateipfad in der Datenbank als Folder%C0%01%/smth.jpg gespeichert. Der Buchstabe ć wird als Hex-Code gespeichert. Dies ist kein Problem bei der Vorschau des Bildes auf der Website.Entfernen von Char-Hex-Codes von String

Problem passiert, wenn ich versuche, einen Unterordner in Folderć über C# -Funktion zu machen. Die Funktion ruft die Dateipfadzeichenfolge ab, findet den Ordnernamen und erstellt einen Unterordner darin. Da meine Zeichenfolge Hex-Code anstelle des Buchstabens ć enthält, kann die Funktion diesen Pfad nicht finden und daher keinen Unterordner erstellen.

Diese Zeichenfolge ist im UTF-8-Format, daher ändert die Änderung der Codierung nichts. Wer weiß, wo das Problem ist und wie man es löst?

+0

"Dateipfad wird in der Datenbank als Ordner gespeichert% C0% 01%/smth.jpg" Ist das, was Sie sehen, wenn Sie eine Auswahl in SQL Server Management Studio ausführen? – dasblinkenlight

+2

Welchen Typ verwenden Sie für die Spalte in Ihrer Datenbank? Sie sollten in der Lage sein, nvarchar zu verwenden, um Unicode-Zeichen zuzulassen, und diese Art der Codierung dann nicht durchführen zu müssen. – juharr

+0

Mein Fehler, Dateipfad wird normalerweise mit Buchstaben æ gespeichert, und Spalte ist Nvarchar. Es kommt mit diesen Hex-Symbolen nach einer SQL-Abfrage. – Djuro

Antwort

0

Sie können den Namen mit Base64 kodieren:

public string ToBase64String(string text) 
{ 
    byte[] data = Encoding.UTF8.GetBytes(text); 
    return Convert.ToBase64String(data); 
} 

und verwenden Sie es string myEncFolderPath = ToBase64String(myFolderPath); bevor die Zeichenfolge in der DB speichern.

Nachdem Sie die Zeichenfolge der DB erhalten, können Sie es dekodieren mit einer normalen Zeichenfolge zurück:

public string FromBase64String(string base64) 
{ 
    byte[] data = Convert.FromBase64String(base64); 
    return Encoding.UTF8.GetString(data); 
} 

von string myFolderPath = FromBase64String(myEncFolderPath); verwenden.

Auf diese Weise können Sie Strings frei in der DB speichern.

+0

Wenn die Spalte 'nvarchar' ist, sollten Sie dies nicht tun müssen. Und es hat anscheinend richtig gespeichert. –