зеркало из https://github.com/mozilla/gecko-dev.git
bug 315672 - Manually unfold lines so as to not split UTF-8 character. patch by mvl, r=dmose
This commit is contained in:
Родитель
29ea29dae6
Коммит
bb06b07439
|
@ -66,17 +66,31 @@ calIcsImporter.prototype.importFromStream =
|
||||||
function ics_importFromStream(aStream, aCount) {
|
function ics_importFromStream(aStream, aCount) {
|
||||||
var items = new Array();
|
var items = new Array();
|
||||||
|
|
||||||
|
// Read in the string. Note that it isn't a real string at this point, because
|
||||||
|
// likely, the file is utf8. The multibyte chars show up as multiple 'chars'
|
||||||
|
// in this string. So call it an array of octets for now.
|
||||||
|
var octetArray = "";
|
||||||
|
var scriptableInputStream = Components.classes["@mozilla.org/scriptableinputstream;1"]
|
||||||
|
.createInstance(Components.interfaces.nsIScriptableInputStream);
|
||||||
|
scriptableInputStream.init(aStream);
|
||||||
|
octetArray = scriptableInputStream.read(-1);
|
||||||
|
|
||||||
|
// Some other apps (most notably, sunbird 0.2) happily splits an utf8 character
|
||||||
|
// between the octets, and adds a newline and space between them, for ics
|
||||||
|
// folding. Unfold manually before parsing the file as utf8.
|
||||||
|
// This is utf8 safe, because octets with the first bit 0 are always one-octet
|
||||||
|
// characters. So the space or the newline never can be part of a multi-byte
|
||||||
|
// char.
|
||||||
|
octetArray = octetArray.replace(/\n /, "");
|
||||||
|
|
||||||
// Interpret the byte-array as an utf8 string, and convert into a
|
// Interpret the byte-array as an utf8 string, and convert into a
|
||||||
// javascript string.
|
// javascript string.
|
||||||
var convStream = Components.classes["@mozilla.org/intl/converter-input-stream;1"]
|
var unicodeConverter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]
|
||||||
.getService(Components.interfaces.nsIConverterInputStream);
|
.createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
|
||||||
convStream.init(aStream, 'UTF-8', 0, 0x0000);
|
// ics files are always utf8
|
||||||
|
unicodeConverter.charset = "UTF-8";
|
||||||
|
var str = unicodeConverter.ConvertFromUnicode(octetArray);
|
||||||
|
|
||||||
var tmpStr = {};
|
|
||||||
var str = "";
|
|
||||||
while (convStream.readString(-1, tmpStr)) {
|
|
||||||
str += tmpStr.value;
|
|
||||||
}
|
|
||||||
|
|
||||||
icssrv = Components.classes["@mozilla.org/calendar/ics-service;1"]
|
icssrv = Components.classes["@mozilla.org/calendar/ics-service;1"]
|
||||||
.getService(Components.interfaces.calIICSService);
|
.getService(Components.interfaces.calIICSService);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче