Bugzilla 52784 - replace ISO control characters with question marks in SXSSF to be consistent with XSSF
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1294657 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
49dd4c3e69
commit
cfa6bdc291
@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
<changes>
|
<changes>
|
||||||
<release version="3.8-beta6" date="2012-??-??">
|
<release version="3.8-beta6" date="2012-??-??">
|
||||||
|
<action dev="poi-developers" type="fix">52784 - replace ISO control characters with question marks in SXSSF to be consistent with XSSF </action>
|
||||||
<action dev="poi-developers" type="add">52057 - updated formula test framework to be aware of recently added Functions </action>
|
<action dev="poi-developers" type="add">52057 - updated formula test framework to be aware of recently added Functions </action>
|
||||||
<action dev="poi-developers" type="add">52574 - support setting header / footer page margins in HSSF </action>
|
<action dev="poi-developers" type="add">52574 - support setting header / footer page margins in HSSF </action>
|
||||||
<action dev="poi-developers" type="add">52583 - fixed WorkbookUtil#createSafeSheetName to escape colon </action>
|
<action dev="poi-developers" type="add">52583 - fixed WorkbookUtil#createSafeSheetName to escape colon </action>
|
||||||
|
@ -250,6 +250,7 @@ public class SheetDataWriter {
|
|||||||
break;
|
break;
|
||||||
// Special characters
|
// Special characters
|
||||||
case '\n':
|
case '\n':
|
||||||
|
case '\r':
|
||||||
if (counter > last) {
|
if (counter > last) {
|
||||||
_out.write(chars, last, counter - last);
|
_out.write(chars, last, counter - last);
|
||||||
}
|
}
|
||||||
@ -263,13 +264,6 @@ public class SheetDataWriter {
|
|||||||
_out.write("	");
|
_out.write("	");
|
||||||
last = counter + 1;
|
last = counter + 1;
|
||||||
break;
|
break;
|
||||||
case '\r':
|
|
||||||
if (counter > last) {
|
|
||||||
_out.write(chars, last, counter - last);
|
|
||||||
}
|
|
||||||
_out.write("
");
|
|
||||||
last = counter + 1;
|
|
||||||
break;
|
|
||||||
case 0xa0:
|
case 0xa0:
|
||||||
if (counter > last) {
|
if (counter > last) {
|
||||||
_out.write(chars, last, counter - last);
|
_out.write(chars, last, counter - last);
|
||||||
@ -278,7 +272,14 @@ public class SheetDataWriter {
|
|||||||
last = counter + 1;
|
last = counter + 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (c < ' ' || c > 127) {
|
// YK: XmlBeans silently replaces all ISO control characters ( < 32) with question marks.
|
||||||
|
// the same rule applies to unicode surrogates and "not a character" symbols.
|
||||||
|
if( c < ' ' || Character.isLowSurrogate(c) || Character.isHighSurrogate(c) ||
|
||||||
|
('\uFFFE' <= c && c <= '\uFFFF')) {
|
||||||
|
_out.write('?');
|
||||||
|
last = counter + 1;
|
||||||
|
}
|
||||||
|
else if (c > 127) {
|
||||||
if (counter > last) {
|
if (counter > last) {
|
||||||
_out.write(chars, last, counter - last);
|
_out.write(chars, last, counter - last);
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,8 @@ package org.apache.poi.xssf.streaming;
|
|||||||
|
|
||||||
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
import org.apache.poi.xssf.SXSSFITestDataProvider;
|
import org.apache.poi.xssf.SXSSFITestDataProvider;
|
||||||
|
import org.apache.poi.xssf.XSSFITestDataProvider;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -66,12 +68,40 @@ public class TestSXSSFCell extends BaseTestCell {
|
|||||||
Sheet sh = wb.createSheet();
|
Sheet sh = wb.createSheet();
|
||||||
Row row = sh.createRow(0);
|
Row row = sh.createRow(0);
|
||||||
Cell cell = row.createCell(0);
|
Cell cell = row.createCell(0);
|
||||||
String sval = "<>\t\r\n\u00a0 &\"POI\'\u2122";
|
String sval = "\u0000\u0002\u0012<>\t\n\u00a0 &\"POI\'\u2122";
|
||||||
cell.setCellValue(sval);
|
cell.setCellValue(sval);
|
||||||
|
|
||||||
wb = _testDataProvider.writeOutAndReadBack(wb);
|
wb = _testDataProvider.writeOutAndReadBack(wb);
|
||||||
|
|
||||||
assertEquals(sval, wb.getSheetAt(0).getRow(0).getCell(0).getStringCellValue());
|
// invalid characters are replaced with question marks
|
||||||
|
assertEquals("???<>\t\n\u00a0 &\"POI\'\u2122", wb.getSheetAt(0).getRow(0).getCell(0).getStringCellValue());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testEncodingbeloAscii(){
|
||||||
|
Workbook xwb = new XSSFWorkbook();
|
||||||
|
Cell xCell = xwb.createSheet().createRow(0).createCell(0);
|
||||||
|
|
||||||
|
Workbook swb = new SXSSFWorkbook();
|
||||||
|
Cell sCell = swb.createSheet().createRow(0).createCell(0);
|
||||||
|
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
// test all possible characters
|
||||||
|
for(int i = 0; i < Character.MAX_VALUE; i++) sb.append((char)i) ;
|
||||||
|
|
||||||
|
String str = sb.toString();
|
||||||
|
|
||||||
|
xCell.setCellValue(str);
|
||||||
|
assertEquals(str, xCell.getStringCellValue());
|
||||||
|
sCell.setCellValue(str);
|
||||||
|
assertEquals(str, sCell.getStringCellValue());
|
||||||
|
|
||||||
|
xwb = XSSFITestDataProvider.instance.writeOutAndReadBack(xwb);
|
||||||
|
swb = SXSSFITestDataProvider.instance.writeOutAndReadBack(swb);
|
||||||
|
xCell = xwb.getSheetAt(0).createRow(0).createCell(0);
|
||||||
|
sCell = swb.getSheetAt(0).createRow(0).createCell(0);
|
||||||
|
|
||||||
|
assertEquals(xCell.getStringCellValue(), sCell.getStringCellValue());
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user