V8: TextField not handling characters as expected

I have a TextField and a Button. The TextField is loaded with a string from the database. If someone changes the value in the field, the button is meant to appear. If they restore the original value, the button is to disappear. Sounds simple…

// make a textfield and get some data for it
TextField textField = new TextField();
String originalValue = // data fetched from a database
textField.setValue(originalValue);

// make a button that responds to changes in the text
Button button = new Button();
boolean textChanged = false;
textField.addValueChangeListener(change -> {
	textChanged = !textField.getValue().equals(originalValue);
	button.setVisible(textChanged);
});

The system works for some strings, and not for others. This one works - the button appears when the string varies from the original, disappears if it is altered to again match the original:

“Phase A - 50hr inspection (at 50 hrs)”

This messier one works too (there is some html in the string which is being interpreted, rather than printed in this forum post):

“Compressions:  #1) 78/80   #2) 77/80   #3) 78/80   #4) 78/80
Static Runup: Outside Temperature: 28, Barometric Pressure: 30.21
Full RPM: 2350 tachometer, 2380 digital tach”

This one doesn’t work. The button appears, but any change subsequently restored still evokes the button.

“W100+ oil and CH48111 oil filter replaced; 50 hour On Condition checks performed.”

Is it the “+”? Have I tripped over a control character? Is there something in the character encoding in TextField? Maybe there are invisible characters in the original string being stripped out? I have an original string and an identical looking string that has been altered then restored that are failing the .equals() test.

Database MySQL 8.0.12 using UTF8mb4 characterset,
Chrome 69,
Vaadin 8.5.2