Skip to content

Commit

Permalink
Added option to force UTF-8
Browse files Browse the repository at this point in the history
Additional parameter which allows to force UTF-8 encoding in Byte mode
  • Loading branch information
codebude committed Jul 7, 2016
1 parent c74d50d commit e473610
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions QRCoder/QRCodeGenerator.cs
Expand Up @@ -31,11 +31,11 @@ public QRCodeGenerator()
this.CreateAlignmentPatternTable();
}

public QRCodeData CreateQrCode(string plainText, ECCLevel eccLevel, bool utf8BOM = false)
public QRCodeData CreateQrCode(string plainText, ECCLevel eccLevel, bool forceUtf8 = false, bool utf8BOM = false)
{
var encoding = this.GetEncodingFromPlaintext(plainText);
var codedText = this.PlainTextToBinary(plainText, encoding, utf8BOM);
var dataInputLength = this.GetDataLength(encoding, plainText, codedText);
var codedText = this.PlainTextToBinary(plainText, encoding, utf8BOM, forceUtf8);
var dataInputLength = this.GetDataLength(encoding, plainText, codedText, forceUtf8);
var version = this.GetVersion(dataInputLength, encoding, eccLevel);

var modeIndicator = DecToBin((int)encoding, 4);
Expand Down Expand Up @@ -805,9 +805,9 @@ private int GetCountIndicatorLength(int version, EncodingMode encMode)
}
}

private int GetDataLength(EncodingMode encoding, string plainText, string codedText)
private int GetDataLength(EncodingMode encoding, string plainText, string codedText, bool forceUtf8)
{
return this.IsUtf8(encoding, plainText) ? (codedText.Length / 8) : plainText.Length;
return forceUtf8 || this.IsUtf8(encoding, plainText) ? (codedText.Length / 8) : plainText.Length;
}

private bool IsUtf8(EncodingMode encoding, string plainText)
Expand All @@ -822,14 +822,14 @@ private bool IsValidISO(string input)
return String.Equals(input, result);
}

private string PlainTextToBinary(string plainText, EncodingMode encMode, bool utf8BOM)
private string PlainTextToBinary(string plainText, EncodingMode encMode, bool utf8BOM, bool forceUtf8)
{
if (encMode.Equals(EncodingMode.Numeric))
return this.PlainTextToBinaryNumeric(plainText);
else if (encMode.Equals(EncodingMode.Alphanumeric))
return this.PlainTextToBinaryAlphanumeric(plainText);
else if (encMode.Equals(EncodingMode.Byte))
return this.PlainTextToBinaryByte(plainText, utf8BOM);
return this.PlainTextToBinaryByte(plainText, utf8BOM, forceUtf8);
else
return string.Empty;
}
Expand Down Expand Up @@ -875,12 +875,12 @@ private string PlainTextToBinaryAlphanumeric(string plainText)
return codeText;
}

private string PlainTextToBinaryByte(string plainText, bool utf8BOM)
private string PlainTextToBinaryByte(string plainText, bool utf8BOM, bool forceUtf8)
{
byte[] codeBytes;
var codeText = string.Empty;

if (this.IsValidISO(plainText))
if (this.IsValidISO(plainText) && !forceUtf8)
codeBytes = Encoding.GetEncoding("ISO-8859-1").GetBytes(plainText);
else
codeBytes = utf8BOM ? Encoding.UTF8.GetPreamble().Concat(Encoding.UTF8.GetBytes(plainText)).ToArray() : Encoding.UTF8.GetBytes(plainText);
Expand Down

0 comments on commit e473610

Please sign in to comment.