Browse Source

Fixed forum-15062: TextEditor changes encoding of UTF-16 files to UTF-8.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2682 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
378073478e
  1. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormattingStrategy/DocumentAccessor.cs
  2. 2
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlDesignerLoader.cs
  3. 3
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/DocumentFactory.cs
  4. 10
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/TextBufferStrategy/StringTextBufferStrategy.cs
  5. 2
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControlBase.cs
  6. 20
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Util/FileReader.cs
  7. 5
      src/Main/Base/Project/Src/Project/Converter/PrjxToSolutionProject.cs
  8. 3
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
  9. 3
      src/Main/Base/Project/Src/Services/ProjectService/ParseableFileContentEnumerator.cs

2
src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormattingStrategy/DocumentAccessor.cs

@ -137,7 +137,7 @@ namespace CSharpBinding.FormattingStrategy
{ {
this.filename = filename; this.filename = filename;
f = new FileStream(filename, FileMode.Open, FileAccess.Read); f = new FileStream(filename, FileMode.Open, FileAccess.Read);
r = ICSharpCode.TextEditor.Util.FileReader.OpenStream(f, ParserService.DefaultFileEncoding, ParserService.DefaultFileEncoding); r = ICSharpCode.TextEditor.Util.FileReader.OpenStream(f, ParserService.DefaultFileEncoding);
} }
int num = 0; int num = 0;

2
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlDesignerLoader.cs

@ -61,7 +61,7 @@ namespace WorkflowDesigner.Loaders
public XomlDesignerLoader(IViewContent viewContent, Stream stream) : this(viewContent) public XomlDesignerLoader(IViewContent viewContent, Stream stream) : this(viewContent)
{ {
Encoding encoding = ICSharpCode.SharpDevelop.ParserService.DefaultFileEncoding; Encoding encoding = ICSharpCode.SharpDevelop.ParserService.DefaultFileEncoding;
xoml = ICSharpCode.TextEditor.Util.FileReader.ReadFileContent(stream, ref encoding, encoding); xoml = ICSharpCode.TextEditor.Util.FileReader.ReadFileContent(stream, ref encoding);
} }
public string Xoml { public string Xoml {

3
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/DocumentFactory.cs

@ -51,8 +51,7 @@ namespace ICSharpCode.TextEditor.Document
public IDocument CreateFromFile(string fileName) public IDocument CreateFromFile(string fileName)
{ {
IDocument document = CreateDocument(); IDocument document = CreateDocument();
Encoding encoding = Encoding.Default; document.TextContent = Util.FileReader.ReadFileContent(fileName, Encoding.Default);
document.TextContent = Util.FileReader.ReadFileContent(fileName, ref encoding, encoding);
return document; return document;
} }
} }

10
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/TextBufferStrategy/StringTextBufferStrategy.cs

@ -72,18 +72,14 @@ namespace ICSharpCode.TextEditor.Document
{ {
} }
StringTextBufferStrategy(string fileName)
{
Encoding encoding = Encoding.Default;
SetContent(Util.FileReader.ReadFileContent(fileName, ref encoding, encoding));
}
public static ITextBufferStrategy CreateTextBufferFromFile(string fileName) public static ITextBufferStrategy CreateTextBufferFromFile(string fileName)
{ {
if (!File.Exists(fileName)) { if (!File.Exists(fileName)) {
throw new System.IO.FileNotFoundException(fileName); throw new System.IO.FileNotFoundException(fileName);
} }
return new StringTextBufferStrategy(fileName); StringTextBufferStrategy s = new StringTextBufferStrategy();
s.SetContent(Util.FileReader.ReadFileContent(fileName, Encoding.Default));
return s;
} }
} }
} }

2
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControlBase.cs

@ -654,7 +654,7 @@ namespace ICSharpCode.TextEditor
if (autodetectEncoding) { if (autodetectEncoding) {
Encoding encoding = this.Encoding; Encoding encoding = this.Encoding;
Document.TextContent = Util.FileReader.ReadFileContent(stream, ref encoding, this.TextEditorProperties.Encoding); Document.TextContent = Util.FileReader.ReadFileContent(stream, ref encoding);
this.Encoding = encoding; this.Encoding = encoding;
} else { } else {
using (StreamReader reader = new StreamReader(fileName, this.Encoding)) { using (StreamReader reader = new StreamReader(fileName, this.Encoding)) {

20
src/Libraries/ICSharpCode.TextEditor/Project/Src/Util/FileReader.cs

@ -23,30 +23,28 @@ namespace ICSharpCode.TextEditor.Util
return codepage == 65001 || codepage == 65000 || codepage == 1200 || codepage == 1201; return codepage == 65001 || codepage == 65000 || codepage == 1200 || codepage == 1201;
} }
public static string ReadFileContent(Stream fs, ref Encoding encoding, Encoding defaultEncoding) public static string ReadFileContent(Stream fs, ref Encoding encoding)
{ {
using (StreamReader reader = OpenStream(fs, encoding, defaultEncoding)) { using (StreamReader reader = OpenStream(fs, encoding)) {
reader.Peek();
encoding = reader.CurrentEncoding; encoding = reader.CurrentEncoding;
return reader.ReadToEnd(); return reader.ReadToEnd();
} }
} }
public static string ReadFileContent(string fileName, ref Encoding encoding, Encoding defaultEncoding) public static string ReadFileContent(string fileName, Encoding encoding)
{ {
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
using (StreamReader reader = OpenStream(fs, encoding, defaultEncoding)) { return ReadFileContent(fs, ref encoding);
encoding = reader.CurrentEncoding;
return reader.ReadToEnd();
}
} }
} }
public static StreamReader OpenStream(Stream fs, Encoding suggestedEncoding, Encoding defaultEncoding) public static StreamReader OpenStream(Stream fs, Encoding defaultEncoding)
{ {
if (fs == null) if (fs == null)
throw new ArgumentNullException("fs"); throw new ArgumentNullException("fs");
if (fs.Length > 3) { if (fs.Length >= 2) {
// the autodetection of StreamReader is not capable of detecting the difference // the autodetection of StreamReader is not capable of detecting the difference
// between ISO-8859-1 and UTF-8 without BOM. // between ISO-8859-1 and UTF-8 without BOM.
int firstByte = fs.ReadByte(); int firstByte = fs.ReadByte();
@ -63,8 +61,8 @@ namespace ICSharpCode.TextEditor.Util
return AutoDetect(fs, (byte)firstByte, (byte)secondByte, defaultEncoding); return AutoDetect(fs, (byte)firstByte, (byte)secondByte, defaultEncoding);
} }
} else { } else {
if (suggestedEncoding != null) { if (defaultEncoding != null) {
return new StreamReader(fs, suggestedEncoding); return new StreamReader(fs, defaultEncoding);
} else { } else {
return new StreamReader(fs); return new StreamReader(fs);
} }

5
src/Main/Base/Project/Src/Project/Converter/PrjxToSolutionProject.cs

@ -282,11 +282,10 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
conversion.basePath = Path.GetDirectoryName(fileName); conversion.basePath = Path.GetDirectoryName(fileName);
Encoding tmp = Encoding.Default; string content = ICSharpCode.TextEditor.Util.FileReader.ReadFileContent(old, Encoding.Default);
string content = ICSharpCode.TextEditor.Util.FileReader.ReadFileContent(old, ref tmp, tmp);
RunConverter(new StringReader(content), fileName, "vsnet2msbuild.xsl", conversion); RunConverter(new StringReader(content), fileName, "vsnet2msbuild.xsl", conversion);
if (File.Exists(oldUserFile)) { if (File.Exists(oldUserFile)) {
content = ICSharpCode.TextEditor.Util.FileReader.ReadFileContent(oldUserFile, ref tmp, tmp); content = ICSharpCode.TextEditor.Util.FileReader.ReadFileContent(oldUserFile, Encoding.Default);
RunConverter(new StringReader(content), userFile, "vsnet2msbuild_user.xsl", conversion); RunConverter(new StringReader(content), userFile, "vsnet2msbuild_user.xsl", conversion);
} }
} }

3
src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

@ -623,8 +623,7 @@ namespace ICSharpCode.SharpDevelop
// return res; // return res;
// load file // load file
Encoding tmp = DefaultFileEncoding; return ICSharpCode.TextEditor.Util.FileReader.ReadFileContent(fileName, DefaultFileEncoding);
return ICSharpCode.TextEditor.Util.FileReader.ReadFileContent(fileName, ref tmp, tmp);
} }
public static Encoding DefaultFileEncoding { public static Encoding DefaultFileEncoding {

3
src/Main/Base/Project/Src/Services/ProjectService/ParseableFileContentEnumerator.cs

@ -84,8 +84,7 @@ namespace ICSharpCode.SharpDevelop.Project
// While one file is parsed, the next is already loaded from disk. // While one file is parsed, the next is already loaded from disk.
// load file // load file
Encoding tmp = defaultEncoding; return ICSharpCode.TextEditor.Util.FileReader.ReadFileContent(fileName, defaultEncoding);
return ICSharpCode.TextEditor.Util.FileReader.ReadFileContent(fileName, ref tmp, defaultEncoding);
} }
ProjectItem nextItem; ProjectItem nextItem;

Loading…
Cancel
Save