From b34048803ad6cf0a0a0c998696a41de118715452 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 10 Sep 2012 16:25:10 -0400 Subject: [PATCH] Fix bug in diff view for filenames with non-ASCII characters (issue 128) --- src/com/gitblit/utils/StringUtils.java | 36 ++++++++++++++++++++++++++++++++++++ 1 files changed, 36 insertions(+), 0 deletions(-) diff --git a/src/com/gitblit/utils/StringUtils.java b/src/com/gitblit/utils/StringUtils.java index 08fd497..e440790 100644 --- a/src/com/gitblit/utils/StringUtils.java +++ b/src/com/gitblit/utils/StringUtils.java @@ -15,6 +15,7 @@ */ package com.gitblit.utils; +import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.nio.CharBuffer; @@ -624,4 +625,39 @@ } return url; } + + /** + * Converts a string with \nnn sequences into a UTF-8 encoded string. + * @param input + * @return + */ + public static String convertOctal(String input) { + try { + ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + Pattern p = Pattern.compile("(\\\\\\d{3})"); + Matcher m = p.matcher(input); + int i = 0; + while (m.find()) { + bytes.write(input.substring(i, m.start()).getBytes("UTF-8")); + // replace octal encoded value + // strip leading \ character + String oct = m.group().substring(1); + bytes.write(Integer.parseInt(oct, 8)); + i = m.end(); + } + if (bytes.size() == 0) { + // no octal matches + return input; + } else { + if (i < input.length()) { + // add remainder of string + bytes.write(input.substring(i).getBytes("UTF-8")); + } + } + return bytes.toString("UTF-8"); + } catch (Exception e) { + e.printStackTrace(); + } + return input; + } } \ No newline at end of file -- Gitblit v1.9.1