git-gui: Translate standard encoding names to Tcl ones

This is a essentially a copy of Paul Mackerras encoding support from
gitk.  I stole the code from gitk commit fd8ccbec4f0161, as Paul has
already done all of the hard work setting up this translation table.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
diff --git a/lib/commit.tcl b/lib/commit.tcl
index 0f3b16d..75b13a0 100644
--- a/lib/commit.tcl
+++ b/lib/commit.tcl
@@ -37,9 +37,14 @@
 					set enc [string tolower [string range $line 9 end]]
 				}
 			}
-			set msg [encoding convertfrom $enc [read $fd]]
-			set msg [string trim $msg]
+			set msg [read $fd]
 			close $fd
+
+			set enc [tcl_encoding $enc]
+			if {$enc ne {}} {
+				set msg [encoding convertfrom $enc $msg]
+			}
+			set msg [string trim $msg]
 		} err]} {
 		error_popup "Error loading commit data for amend:\n\n$err"
 		return
@@ -287,11 +292,18 @@
 	#
 	set msg_p [gitdir COMMIT_EDITMSG]
 	set msg_wt [open $msg_p w]
+	fconfigure $msg_wt -translation lf
 	if {[catch {set enc $repo_config(i18n.commitencoding)}]} {
 		set enc utf-8
 	}
-	fconfigure $msg_wt -encoding binary -translation binary
-	puts -nonewline $msg_wt [encoding convertto $enc $msg]
+	set use_enc [tcl_encoding $enc]
+	if {$use_enc ne {}} {
+		fconfigure $msg_wt -encoding $use_enc
+	} else {
+		puts stderr "warning: Tcl does not support encoding '$enc'."
+		fconfigure $msg_wt -encoding utf-8
+	}
+	puts -nonewline $msg_wt $msg
 	close $msg_wt
 
 	# -- Create the commit.