diff --git a/tools/aapt2/ResourceParser_test.cpp b/tools/aapt2/ResourceParser_test.cpp
index c98c0b95b69bb..fc1aeaa58fe2e 100644
--- a/tools/aapt2/ResourceParser_test.cpp
+++ b/tools/aapt2/ResourceParser_test.cpp
@@ -164,6 +164,39 @@ TEST_F(ResourceParserTest, ParseStringWithWhitespace) {
EXPECT_THAT(*str, StrValueEq(" This is what I think "));
}
+TEST_F(ResourceParserTest, ParseStringTruncateASCII) {
+ // Tuncate leading and trailing whitespace
+ EXPECT_TRUE(TestParse(R"( Hello )"));
+
+ String* str = test::GetValue(&table_, "string/foo");
+ ASSERT_THAT(str, NotNull());
+ EXPECT_THAT(*str->value, StrEq("Hello"));
+ EXPECT_THAT(str->untranslatable_sections, IsEmpty());
+
+ // AAPT does not truncate unicode whitespace
+ EXPECT_TRUE(TestParse(R"(\u0020\Hello\u0020)"));
+
+ str = test::GetValue(&table_, "string/foo2");
+ ASSERT_THAT(str, NotNull());
+ EXPECT_THAT(*str->value, StrEq(" Hello "));
+ EXPECT_THAT(str->untranslatable_sections, IsEmpty());
+
+ // Preserve non-ASCII whitespace including extended ASCII characters
+ EXPECT_TRUE(TestParse(R"( Hello )"));
+
+ str = test::GetValue(&table_, "string/foo3");
+ ASSERT_THAT(str, NotNull());
+ EXPECT_THAT(*str->value, StrEq("\xC2\xA0Hello\xC2\xA0"));
+ EXPECT_THAT(str->untranslatable_sections, IsEmpty());
+
+ EXPECT_TRUE(TestParse(R"(2005年6月1日)"));
+
+ str = test::GetValue(&table_, "string/foo4");
+ ASSERT_THAT(str, NotNull());
+ EXPECT_THAT(*str->value, StrEq("2005年6月1日"));
+ EXPECT_THAT(str->untranslatable_sections, IsEmpty());
+}
+
TEST_F(ResourceParserTest, ParseStyledStringWithWhitespace) {
std::string input = R"( My favorite string )";
ASSERT_TRUE(TestParse(input));
diff --git a/tools/aapt2/ResourceUtils.cpp b/tools/aapt2/ResourceUtils.cpp
index 8fc3d65801652..560077cc322c3 100644
--- a/tools/aapt2/ResourceUtils.cpp
+++ b/tools/aapt2/ResourceUtils.cpp
@@ -30,7 +30,6 @@
#include "util/Files.h"
#include "util/Util.h"
-using ::aapt::text::IsWhitespace;
using ::aapt::text::Utf8Iterator;
using ::android::StringPiece;
using ::android::StringPiece16;
@@ -807,7 +806,7 @@ StringBuilder& StringBuilder::AppendText(const std::string& text) {
Utf8Iterator iter(text);
while (iter.HasNext()) {
char32_t codepoint = iter.Next();
- if (!quote_ && text::IsWhitespace(codepoint)) {
+ if (!quote_ && iswspace(codepoint)) {
if (!last_codepoint_was_space_) {
// Emit a space if it's the first.
xml_string_.text += ' ';